본문 바로가기
언어/JAVA

[JAVA] == vs equals vs hashCode

by 이민우 2021. 3. 30.
728x90
반응형

==

객체, 참조 타입에서 가리키는 주소가 같은지 확인한다.

즉, 같은 객체인지를 확인한다.

 

 

equals()

객체의 내용 (값)이 같은지 확인한다.

 

 

hashCode()

메모리에서 가진 해시 주소값을 반환한다.

상세하게 설명하면 주소값를 비교함으로써 같은 객체임을 확인하는 함수이다.

 

하지만 hashCode를 사용한 비교는 그렇게 정확하지 못한데, hashCode는 객체마다 유일한 값을 리턴하지 않고, 다른 객체임에도 같은 hashCode를 갖는 경우가 생기기 때문이다.

 

같은 hashCode를 갖게 되는 것은 HashTable이 <키, 값>의 형태로 데이터를 저장할 때, 키 값을 기준으로 해시값을 만들기 때문이다.

이 때 HashTable은 크기가 한정적이기에 서로 다른 객체가 같은 해시값을 가질 수 있다.

이를 해시 충돌이라고 한다.

 

그래서 hashCode를 사용한 비교 시에는 hashCode를 먼저 비교하여 동일한 지 판별하고, 동일하다면 equals로 값을 비교하여 그 결과도 동일해야 같은 객체임을 판단한다.

728x90
반응형

'언어 > JAVA' 카테고리의 다른 글

[JAVA] 온점 단위 Split  (0) 2022.03.10
[JAVA] Call by Value & Call by reference  (0) 2021.04.29
[JAVA] Garbage Collection (GC)  (0) 2021.03.30
[JAVA] String, StringBuffer, StringBuilder  (0) 2021.03.30
[JAVA] BufferedReader와 Scanner  (0) 2021.03.30