❗ 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로 변경하면서 주소값이 겹치는 경우도 있다.