use*_*521 0 java object hashcode uniqueidentifier
我一直在从事我的项目(我也在使用 EMF Compare)。我需要为我使用的每个对象保留一个唯一的 ID,这就是我决定使用 IdentityHashCode 的原因,据我所知,该值在编译过程中是相同的。
我已将对象作为另一个类的方法中的参数给出,但是当我尝试获取哈希码时,这与打印对象的值时看到的不同。
像这样的东西:
System.out.println("The Object is: "+obj)
System.out.println("The hash ID is: +Integer.toHexString(System.identityHashCode(obj)));
但结果我得到了这个:
对象是:***xxxxxxxxxxxxxx***.EntityImpl@18e588c (name: Comment) has been removed.
哈希 ID 为:1ec1758
正如您所看到的,两个值(18e588c和1ec1758)完全不同,但我不明白为什么。到目前为止,我所做的唯一一件事(并且有效)是获取对象的 String,然后使用 substring 方法来获取18e588c(对于本例)
我将不胜感激任何答案。
我需要为我使用的每个对象保留一个唯一的 ID,这就是我决定使用 IdentityHashCode 的原因,据我所知,该值在编译过程中是相同的。
不。它与编译无关,并且不能保证它是唯一的。
目前尚不清楚您想要做什么,但您根本不应该将哈希码视为唯一的 - 它们不能保证是唯一的。
该Object.hashCode文档指定:
在相当实用的情况下,Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。
但这与保证不是一回事。
您还对调用的结果感到困惑toString()- 我怀疑您的类实际上覆盖了hashCode(),并Object.toString()调用可能被覆盖的hashCode()方法而不是使用身份哈希代码:
Object 类的 toString 方法返回一个字符串,该字符串由对象所属的类的名称、at 符号“@”以及对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:
Run Code Online (Sandbox Code Playgroud)getClass().getName() + '@' + Integer.toHexString(hashCode())
如果您致电,obj.hashCode()您将看到与 所示的相同值toString。
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |