언어/자바
[Effective java] equals를 재정의하려거든 hashCode도 재정의하라
nanoson
2019. 7. 24. 01:06
equals를 재정의 하면 반드시 hashCode도 재정의하라
여러 컬렉션이 hashCode를 사용하기 때문에 논리적으로 동일한 객체를 사용할 때 hashCode를 재정의 하지 않으면 예상치 못한 결과가 나올 수 있다.
- 두 객체가 논리적으로 동일(equals가 true)이면 hashCode는 반드시 같아야한다.
- 두 객체가 논리적으로 다르면 hashCode는 가급적 달라야한다.
- Equals 비교에서 사용하지 않는 필드는 hashCode 생성시 반드시 제외해야한다.
- 요즘은 IDE가 좋으니 가급적 IDE에서 제공하는 자동 생성 기능을 사용하자.
hashCode생성 시에 전통적으로 31을 곱해가면서 연산한다.
이유는 잘 모르겠다. 홀수이고 소수이기 때문이라고 하는데..
짝수를 하면 오버플로우가 나서 정보를 잃기 때문이라고 한다.