[Effective Java] equals를 재정의하려거든 hashCode도 재정의하라


[Effective Java] equals를 재정의하려거든 hashCode도 재정의하라

equals를 재정의하려거든 hashCode도 재정의하라 - equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. - 재정의하지 않으면 hashCode 일반 규약을 어기게 되어 해당 클래스의 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킨다. - equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 HashCode는 똑같은 값을 반환해야 한다. -> hashCode 재정의를 잘못했을 때 크게 문제가 되는 조항은 2번째다. 즉 논리적으로 같은 객체는 같은 해시 코드를 반환해야 한다. Map<PhoneNumber,String> m = new HashMap<>(); m.put(new PhoneNumber(707,867,5309), "제니"); m.get(new PhoneNumber(707,867,5309)); - put을 한 뒤 get을 하면 "제니"가 아니라 'null'을 반환한다. - 여기에서는 new를 2...


#effectivejava #이펙티브자바

원문링크 : [Effective Java] equals를 재정의하려거든 hashCode도 재정의하라