1 min to read
C# 문자열 비교
-
C#에서 문자열 비교 시 사용되는 메서드는 크게 2가지이다. op_Equality(==)와 string.Equals이다.
-
string class에는 op_Equality가 재정의 되어있어 문자열 비교 시
==
를 사용하면 내부적으로 string.Equals 메서드를 호출한다.
-
위와 같은 간단한 메서드는 런타임에서 인라인화되기 때문에 두 메서드는 성능상 크게 차이가 나지 않는다.
-
결과적으로
==
와Equals
의 성능차이는 크게 없다는 것인데, 코드를 작성할 때 가독성을 생각한다면==
를 쓰는게 좋을 것 같다. -
그러나❗
==
와Equals
의 주의점이 있는데, 바로 string 객체가 object 타입으로 담겼을 때이다.
-
위 결과와 같이
a == d
로 비교를 하게되면 False를 반환하게 된다. -
d 변수의 타입이 object라서 object 타입의 == 연산이 이루어지는데, object 타입의 == 연산자는
object.ReferenceEquals
를 호출하기 떄문에 결과가 False이다.- string 타입은 ==가 재정의되어 string.equals를 호출해서 문자열을 비교하지만, object 타입은 아니다.
- 변수 c는 Substring 인스턴스 메서드로 인해 새로운 string 객체가 할당된다. => 객체 힙의 참조 위치가 다르다.
-
문자열 비교를 할 때 object 타입일 떄의 사항을 고려하여 작업하면 될 것 같다.
-
추가적으로 Generic 메서드 안에서 비교를 하는 경우 object ==가 이루어진다.
- 제약조건이 class이기 때문에 ReferenceEquals를 호출하는 것 같다.
—