我有这个问题。java中的对象identityhashcode
我一直在我的项目(我也使用EMF比较)工作。我需要为每个使用的对象保留一个唯一的ID,这就是为什么我决定使用IdentityHashCode,据我了解,通过编译这个值是相同的。
我已经将对象作为另一个类的方法中的参数,但是当我尝试获取散列码时,这与我在打印对象的值时看到的不一样。
事情是这样的:
System.out.println("The Object is: "+obj)
System.out.println("The hash ID is: +Integer.toHexString(System.identityHashCode(obj)));
但作为一个结果,我得到这样的:
的对象是:***xxxxxxxxxxxxxx***[email protected] (name: Comment) has been removed.
哈希ID是:1ec1758
正如你所看到的两个值是完全不同的,但我不明白为什么。到目前为止,我所做的(和它的工作)唯一的事情是获取对象的字符串,然后使用子字符串方法获得18e588c
(在这个例子中)
我会很感激任何答案。
问候
哪里是你的对象(obj)制成?它是由休眠或其他框架?它看起来像你的对象只是一个代理,如果你调用obj.toString(),所以它可以真正回答该对象已被删除。这意味着内部对象已被删除或数据库连接已关闭等。但被引用对象的hashCode存在,因此您可以打印该hashCode。 –
你是否为你的类重写了'hashCode()'?如果是这样,你需要提供你的实现代码。 – Raedwald