2010-12-31 2 views
4

java의 오브젝트 참조와 오브젝트의 해시 코드 값의 차이는 무엇입니까?오브젝트 참조와 오브젝트 해시 코드의 차이점

+1

[차이점은 무엇입니까? ] (http://stackoverflow.com/questions/3700595/difference-between-hash-code-and-reference-or-address-of-an-object) 원래 Java ME를 요청했지만 . –

답변

6

완전히 다른 두 가지 개념입니다. 위의 예에서

Cat oldCat = new Cat(); 
Cat newCat = new Cat(); 
Cat oldCatRef = oldCat; 

, oldCatRef oldCat과 동일한 개체에 대한 참조이다. 그들은 같은 객체를 참조하기 때문에 해시 코드는 동일합니다.

그러나 oldCatnewCat은 같은 개체를 참조하지 않습니다. 두 개의 다른 객체에 대한 참조입니다. 그러나 구현에 따라 동일한 hashCode을 가질 수 있습니다. hashCode은 단순히 당신이 오버라이드 할 수있는 Object 클래스의 메소드 일뿐입니다. (PeterJ)에서

EDIT 다음 JavaSE6 객체 사양에 따르면 는 oldCat.equals (newCat)는 다음 두 가지의 해시는 동일 할 필요가있는 경우. 그것은 좋은 프로그래밍이 그 계약에 의해 순종의

당신은 아마뿐만 아니라이 질문에 대한 답변을 확인하려면 : 객체의 해시 코드 참조 또는 주소 사이

difference between hash code and reference or address of an object?

+0

JavaSE6 Object 사양에 따르면, oldCat.equals (newCat)의 경우 두 항목의 해시 코드가 동일해야합니다. 그 계약에 순종하는 것이 좋은 프로그래밍입니다. – Shawn

+0

@peterJ 제안에 감사드립니다! 답변을 업데이트했습니다. – rkg

7

개체에 대한 참조는 바로 그 것입니다. Object에 대한 참조입니다.

개체의 해시 코드는 구현에 따라 다양 할 수있는 hashCode() 메서드의 결과입니다. 기본 hashCode() :

+0

64 비트 JVM에서 참조는 일반적으로 8 바이트를 사용하고 hashCode()는 32 비트 만 사용합니다. –

3

두 개의 서로 다른 객체가 같은 hashCode을 가질 수 있습니다 일반적으로 정수로 오브젝트의 내부 주소를 변환하는 형태로 구현됩니다 만, 그러한 구현 테크닉은의 JavaTM 프로그램 언어에서는 불필요 . referencehashCode이 편리한 계산 된 특성 인 개체에 대한 고유 한 포인터입니다.

관련 문제