☕ 자바 JAVA/☕ 클래스와 함수 Class & Method

[JAVA]hashCode()

뉴이 NUEY 2024. 11. 5. 16:19
반응형

 

hashCode()

  • 모든 클래스의 조상인 Object클래스의 함수 중 하나입니다.
  • 객체의 해시코드hash code를 반환합니다.
❓ native
hashCode함수는 native로 선언되어있다. 여기서 native란
네이티브 메서드
를 말한다. OS가 가지고 있는 메서드이다. 주로 C언어로 작성되어 있다.
Object함수인) equals()를 오버라이딩하면, hashCode()도 오버라이딩히애 한다.
* 이유 : equals()결과가 같으면 해시코드도 같아야 하기 때문이다.

exmaple

equals를 사용하지 않았을 경우
equals만 오버라이딩하면 equals만 true로 바뀌었다. hashcode도 오버라이딩 해주어야 한다.

❗ 모든 클래스의 조상인 Object를 통해 equals()와 hashCode()가 오버라이딩 된 것이다.
오버라이딩 시 선언부는 동일해야 하기 때문에 이 부분은 항상 동일하게 써야만 한다.
equals() 오버라이딩하면 hashcode()도 오버라이딩 해야 하기 때문에 아래와 같이 고쳐줘야 한다.

equals()와 hashCode()모두 오버라이딩 해주었을 때 모두 같게 나온 것을 확인할 수 있다.


System.identityHashCode(Object obj)
: (오버라이딩 되지 않은)고유해시코드 출력

위의 코드 그대로인 상태에서 실행해보면
출력결과

이 함수는 참고용으로만 알아두면 된다고 한다.

32bit JVM에서는 주소값이 Integer였는데 63bit에서 Long으로 변경되었다.
hashcode() 사용할 때 8Byte인 Long을 4Byte인 int로 변경하면서 주소값이 겹치는 경우도 있다.

 

 

 

참조 : https://youtu.be/GfYg3imRZsc?si=2uV3N-Z-MYG_ISwu

반응형