Big Integer를 구현하면서 ==를 오버로드 하다보면 노란색 경고로 !=, Equals 등을 구현하지 않았다고 뜬다.
==와 Equals는 동일한 작동일 것 같은데 왜 이것도 오버라이드 하라고 빼액 거리는지 둘이 어떤 차이가 있는지 궁금해졌다.
근데 또 ==을 오버라이드하다보면, ReferecneEquals로 null체크를 한다. 이건 또 뭘까?
== 연산자
- 값 타입 :두 값이 비슷한지 비교
- 참조 타임 : 두 객체가 동일한 메모리 위치를 참조하는지 비교
Equals
- 매서드로, 클래스에만 존재
- 객체의 동일성을 판단하는데 사용
- 기본적으로 두 객체가 같은 인스턴스를 가리키는지 확인
ReferenceEquals
- Object 클래스의 static method로, 두 객체가 동일한 참조를 가리키는지 확인
- 값형식은 값을 박싱하여 비교하기때문에 동일한 참조를 가리키지 않음!
- 두 참조가 동일한 인스턴스를 가리키는지 확인하고 싶을 때 사용
- 오버라이드 될 수 없음
정리하자면,
== 연산자 |
Equals |
ReferenceEquals |
오버로드 |
오버라이드 |
오버라이드 불가 |
값 / 참조 |
값/ 참조 |
참조만 |
말그대로 연산자, 양 옆에 값을 받아 사용 |
매서드 |
매서드 |