2009-07-17 3 views
2

toString() 메서드를 호출하여 내 개체의 className @ 2345와 같은 고유 ID를 얻을 수 있지만 toString() 메서드를 덮어 쓴 후 어떻게 고유 ID를 얻을 수 있습니까?toString() 메서드를 덮어 쓴 후 Object의 고유 ID를 가져 오는 방법은 무엇입니까?

+7

큰소리로 우는위한, IT가 UNIQUE 아니다. (죄송합니다) –

+0

사실 해시 코드이며 실제로는 고유하지 않습니다. 하지만 대부분의 경우 객체를 구별하기 위해 사용할 수 있습니다. –

+0

"대부분의 경우"는 단순히 도박에 대한 코드를 쓰지 않는 한 일반적으로 소프트웨어에 의존하는 것이 아니라 확률을 정의합니다. – Robin

답변

12

System.identityHashCode()를 호출하고 매개 변수로 개체를 전달하면 얻을 수 있습니다.

0

className @ 주소도 출력하는 한 줄의 toString() 구현을 찾으려면 Apache Commons ToStringBuilder.reflectionToString()을 확인하십시오. 이것은 형식의 문자열을 반환합니다 : 클래스 이름에 @ 주소 [필드 1 = 값 1, FIELD2 = 값 2, ...]

+0

주소가 아니라 해시 코드입니다. – joeslice

2

더 정확하게

obj.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(obj)) 
+0

또는 단지 public String identityString() { return super.toString(); } ? – Cowan

관련 문제