equals() 메서드를 재정의하면 == 연산자에 영향을주지 않습니다. ==는 2 개의 참조가 동일한 객체를 가리키는 지 테스트하는 데 사용됩니다. equals() 메서드 "meaningfully"는 2 개의 개체를 비교합니다.
"의미있는"작품의 의미를 이해하는 것이 중요합니다. 예를 들어 2 문자열 또는 2 정수와 비교할 때 평등을 더 쉽게 이해할 수 있습니다. 이것이 Object 클래스에서 상속 된 equals() 메서드가 String 클래스와 Wrapper 클래스 (Integer, Float 등)에 의해 이미 오버 라이드 된 이유입니다. 그러나 Song 유형의 객체 두 개를 비교하는 경우에는 어떻게됩니까? 여기에서, 평등의 기초 확립 될 수
1) 아티스트 이름
2) 노래 이름
3) 또는 다른 기준
따라서 "명시 적으로"결정() 메소드를 등호를 재정의해야 "언제"2 곡의 대상이 동등한 것으로 간주됩니다.
질문에서 언급 한 "예기치 않은 동작"은지도와 같은 컬렉션을 처리 할 때 위의 (노래)와 같은 개체와 관련이 있습니다. equals()와 hashcode() 메소드를 오버라이드 (override) 할 때까지, 맵 내의 이러한 객체를 사용하지 말아주세요. 해시 맵 검색 및 색인 생성이 작동하는 이유. 특정 규칙에 대해서는 JavaDoc을 참조하십시오. 기억해야 할 것은 다음과 같습니다.
2 개의 객체가 의미 상으로 같으면 해시 코드는 동일한 값을 반환해야합니다. 그러나 동일한 해시 코드를 반환하는 경우 2 개의 객체가 같을 필요는 없습니다. 다시 말하지만 Java는 이와 관련하여 어떠한 규칙도 시행하지 않습니다. equals() 및 hashcode() 메서드를 올바르게 구현하는 것은 사용자의 책임입니다.
s/overwrite/override/p –