[C#] x == null / x is null 차이

  코딩 중 문득 궁금해져서 알아봤습니다. 변수 == null변수 is null의 차이점.

  객체끼리 비교한다는 가정 하에, 둘은 차이가 없다는 결론을 얻었습니다. 그러나 일부 상황에서는 심각한 차이가 발생합니다.

  일단 차이가 없는 경우를 먼저 보여드리면, 객체끼리 비교하는 아래와 같은 상황입니다.

string a;
Console.WriteLine(a is null); // => true
Console.WriteLine(a == null); // => true

a = null;
Console.WriteLine(a is null); // => true
Console.WriteLine(a == null); // => true

  물론, string 뿐 아니라 다른 여러 객체에도 해당됩니다.

  그럼 심각한 문제가 생기는 상황이란 뭘까요? 예상하신 분도 계시겠지만, 바로 Primitive type, Value typeis null을 사용하는 상황입니다.

int a;
Console.WriteLine(a == null); // => false
Console.WriteLine(a is null); // error CS0037: 'int'은(는) null을 허용하지 않는 값 형식이므로 null을 이 형식으로 변환할 수 없습니다.

  위의 예제는 원시 타입에 is null을 쓸 경우에 나타나는 에러 메세지이지만, Enum과 같은 값 타입에 is null을 쓸 때에도 마찬가지로 동일한 에러가 나타납니다.

  물론, CS0037이란 이름에서 알 수 있듯 런타임 에러가 아니기 때문에, 빌드 전 미리 확인하고 대처할 수 있습니다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭