equals를 재정의 하면 반드시 hashCode도 재정의하라
여러 컬렉션이 hashCode를 사용하기 때문에 논리적으로 동일한 객체를 사용할 때 hashCode를 재정의 하지 않으면 예상치 못한 결과가 나올 수 있다.
- 두 객체가 논리적으로 동일(equals가 true)이면 hashCode는 반드시 같아야한다.
- 두 객체가 논리적으로 다르면 hashCode는 가급적 달라야한다.
- Equals 비교에서 사용하지 않는 필드는 hashCode 생성시 반드시 제외해야한다.
- 요즘은 IDE가 좋으니 가급적 IDE에서 제공하는 자동 생성 기능을 사용하자.
hashCode생성 시에 전통적으로 31을 곱해가면서 연산한다.
이유는 잘 모르겠다. 홀수이고 소수이기 때문이라고 하는데..
짝수를 하면 오버플로우가 나서 정보를 잃기 때문이라고 한다.
'언어 > 자바' 카테고리의 다른 글
자바 자료형 사용 시 주의 (0) | 2019.08.15 |
---|---|
자바 표현식 몰랐던 사실 정리 (0) | 2019.08.12 |
[Effective java] equals는 일반 규약을 지켜 재정의하라. (0) | 2019.07.22 |
java.util.Date와 LocalDateTime (0) | 2019.07.20 |
[Effective java] 생성자 대신 정적 팩터리 메소드를 고려하라 (0) | 2019.07.20 |