이 질문이 있습니다.자바에서 객체 identityhashcode
저는 프로젝트에서 일하고 있습니다 (EMF Compare도 사용하고 있습니다). 내가 사용하는 각 객체에 대한 고유 한 ID를 유지해야하므로 IdentityHashCode를 사용하기로 결정했습니다. 이해하는 한,이 값은 컴파일을 통해 동일합니다.
다른 클래스의 메서드에서 매개 변수로 개체를 지정했지만 해시 코드를 가져 오려고하면이 값이 개체의 값을 인쇄 할 때 볼 수있는 것과 다릅니다. 이 같은
뭔가 : System.out.println("The hash ID is: +Integer.toHexString(System.identityHashCode(obj)));
그러나
System.out.println("The Object is: "+obj)
나는이 얻을 결과 :
이오브젝트는 다음과 같습니다 ***xxxxxxxxxxxxxx***[email protected] (name: Comment) has been removed.
이
해시 ID는 다음과 같습니다 1ec1758
두 값이 완전히 다르다는 것을 알 수 있겠지만 그 이유를 이해할 수는 없습니다. 지금까지 (그리고 작동하는) 유일한 방법은 객체의 문자열을 가져온 다음 하위 문자열 메서드를 사용하여 18e588c
(이 예제의 경우)을 얻는 것입니다.이 예제의 경우
모든 답변을 주시면 감사하겠습니다.
는
내가 사용하고 각 개체에 대한 고유 ID를 유지할 필요가
개체 (obj)는 어디에 만들어 졌습니까? 최대 절전 모드 나 다른 프레임 워크로 만들어 졌습니까? 그것은 당신의 객체가 프록시 일 뿐이며 obj.toString()을 호출하면 실제로 그 객체가 제거되었다고 응답 할 수 있습니다. 이것은 내부 객체가 제거되었거나 데이터베이스 연결이 닫혀 있다는 것을 의미합니다. 그러나 참조 된 객체의 hashCode가 존재하므로 해당 hashCode를 인쇄 할 수 있습니다. –
클래스에 대해'hashCode()'를 재정의 했습니까? 그렇다면 구현 코드를 제공해야합니다. – Raedwald