답변:
예, 기본 구현은 Object입니다 (일반적으로 말하면 equals 및 / 또는 hashCode를 재정의 한 클래스에서 상속하는 경우 대신 해당 구현을 사용합니다).
문서에서 :
Object 클래스에 대한 equals 메소드는 객체에 대해 가능한 가장 구별되는 등가 관계를 구현합니다. 즉, null이 아닌 참조 값 x 및 y에 대해이 메서드는 x와 y가 동일한 객체를 참조하는 경우에만 true를 반환합니다 (x == y는 true 값을 가짐).
합리적으로 실용적인만큼 Object 클래스에 의해 정의 된 hashCode 메서드는 고유 한 개체에 대해 고유 한 정수를 반환합니다. (이것은 일반적으로 객체의 내부 주소를 정수로 변환하여 구현되지만 JavaTM 프로그래밍 언어에서는이 구현 기술이 필요하지 않습니다.)
예, Object
클래스가 암시 적으로 Object를 확장하므로 클래스 에서 . equals
단순히 반환합니다 this == obj
. hashCode
구현은 기본입니다. 추측 일뿐입니다. 객체에 대한 포인터를 반환합니다.
자체 구현을 제공하지 않으면 Object에서 파생 된 구현이 사용됩니다. 클래스 인스턴스를 HashSet (실제로 hashCode ()를 사용하는 모든 컬렉션) 또는 객체의 동등성을 확인해야하는 항목 (예 : HashSet의 contains () 메서드)에 넣을 계획이 아니라면 괜찮습니다. 그렇지 않으면 그것이 당신이 요구하는 것이라면 잘못 작동합니다.
이러한 방법 덕분에 자신의 구현을 제공 할 매우 쉽습니다 HashCodeBuilder 및 EqualsBuilder 에서 아파치 코 몬즈 랭 .
Foo
와하면 Bar
변경 가능한 형태의 두 가지 경우에 대한 참조, 및 방법 (예를 들어 존재 SomeMutatingMethod
하는) 등의 Foo.SomeMutatingMethod()
영향을주지 않는 Bar
것이 않는 동일한 방법으로 Foo
, 그 차이가 불균등으로 개체 간주하기에 충분해야한다.
IBM의 developerworks 는 다음과 같이 말합니다.
이 기본 구현에서 두 참조는 정확히 동일한 객체를 참조하는 경우에만 동일합니다. 마찬가지로 Object에서 제공하는 hashCode ()의 기본 구현은 객체의 메모리 주소를 정수 값에 매핑하여 파생됩니다.
그러나 특정 공급 업체의 Java 버전에 대한 정확한 구현 세부 정보를 확인하려면 소스로 보는 것이 가장 좋습니다 (사용 가능한 경우).
v6u23 ea
:public native int hashCode();