<aside> 💡
equals를 재정의한 클래스는 hashCode도 재정의 해야함!!!!
그렇지 않으면 인스턴스를 HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생
</aside>
equals 가 물리적으로 다른 두 객체를 논리적으로 같다고할 때, hashCode 는 서로 다른 값을 반환함
Map<PhoneNumber, Person> map = new HashMap<>();
map.put(new PhoneNumber(010,1234,5678), new Person("리치"));
HashMap은 해시코드가 서로 다른 엔트리끼리는 동치성 비교를 시도조차 않도록 최적화 되어있음@Override
public int hashCode() {
return 42;
}
result를 선언한 후 값을 c로 초기화
equals 비교에 사용되는 필드Type.hashCode(f)를 수행한다. 여기서 Type은 해당 기본타입의 박싱 클래스equals 메소드가 이 필드의 equals를 재귀적으로 호출하여 비교한다면, 이 필드의 hashCode를 재귀적으로 호출Arrays.hashCode를 사용result를 갱신한다.
result = 31 * result + c;result를 반환equals비교에 사용되는 필드에 대해서만 해시코드를 계산