Java

hashcode와 String 의equals 함수

훈지런 2022. 6. 2. 23:00

hashcode와 equals 함수에대해 설명하라는 질문을 받았다.

이제와서 생각해보면 사실 정답을 알려준게 아닌가 싶다.

어쨌건 생각나는 질문이니 정리해보자.

 

난 사실 해시코드가 객체의 메모리 주소라고 생각했지만 아니라고한다. 정확히는 해시 알고리즘에 의해 생성된 해시값이라고 한다. 해시코드와 이퀄스 함수는 최상위 객체인 Object에 정의되어있기때문에 모든객체는 가지고있다고 보면된다.

 

자바는 해시코드가 같으면 같은 객체로 판단하고 다르면 다른 객체로 판단한다.

해시코드는 객체를 식별하기위한 고유한 값이다.

 

32비트 jvm은 절때로 중복되는 해시코드값이 나올수없다고하는데

64비트 jvm에서는 중복되는 해시코드값이 나올수도있다고한다.

 

그래서 같은 객체임을 확일할때는 해시코드와 이퀄스 함수를 둘다 확인하는 과정을 거친다.

 

그러나 String 같은 경우 동일한 문자열이면 같은 해시코드를 갖도록 재정의되어있다.

'Java' 카테고리의 다른 글

클래스, 객체, 인스턴스  (0) 2022.10.06
Map  (0) 2022.06.14
배열, List  (0) 2022.06.11
자바 메모리구조 아주 간략하게  (0) 2022.06.03
SOLID 원칙  (0) 2022.06.02