gpt4 book ai didi

java - java中的对象身份哈希码

转载 作者:行者123 更新时间:2023-12-01 23:44:52 25 4
gpt4 key购买 nike

我一直在从事我的项目(我也在使用 EMF Compare)。我需要为我使用的每个对象保留一个唯一的 ID,这就是我决定使用 IdentityHashCode 的原因,据我所知,这个值在编译过程中是相同的。

我已将对象作为另一个类的方法中的参数给出,但是当我尝试获取哈希码时,这与打印对象的值时看到的不同。

类似这样的事情:

System.out.println("对象是:"+obj)

System.out.println("哈希 ID 为:+Integer.toHexString(System.identityHashCode(obj)));

但结果我得到了这个:

对象是:***xxxxxxxxxxxxxxx***.EntityImpl@18e588c(名称:Comment)已被删除。

哈希 ID 为:1ec1758

正如您所看到的,这两个值(18e588c1ec1758)完全不同,但我不明白为什么。到目前为止,我所做的唯一一件事(并且有效)是获取对象的 String,然后使用 substring 方法获取 18e588c (对于本例)

如果有任何答案,我将不胜感激。

最佳答案

I need to keep an unique ID for each object that I'm using, that's why I decided to use the IdentityHashCode, as far as I understand, this value is the same through the compilation.

没有。它与编译无关,并且保证是唯一的。

尚不清楚您想要做什么,但您根本不应该将哈希码视为唯一 - 它们不能保证是唯一的。

Object.hashCode 文档指定:

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects.

但这与保证它不同。

对调用toString()的结果感到困惑 - 我怀疑您的类实际上覆盖了hashCode(),并且Object.toString() 调用可能被重写的 hashCode() 方法,而不是使用身份哈希码:

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

getClass().getName() + '@' + Integer.toHexString(hashCode())

如果您调用 obj.hashCode(),您将看到与 toString 显示的相同值。

关于java - java中的对象身份哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com