如何获取覆盖hashCode()的对象的唯一ID?

2022-08-31 05:25:41

当 Java 中的类不覆盖 hashCode() 时,打印该类的实例会给出一个不错的唯一编号。

Object 的 Javadoc 是关于 hashCode() 的

尽管合理实用,但由类 Object 定义的 hashCode 方法确实为不同的对象返回不同的整数。

但是当该类覆盖hashCode()时,我如何获得其唯一编号?


答案 1

System.identityHashCode(yourObject)将给出Object的“原始”哈希代码作为整数。唯一性不一定能得到保证。Sun JVM 实现将为您提供一个与此对象的原始内存地址相关的值,但这是一个实现细节,您不应依赖它。

编辑:答案修改了汤姆在下面的评论之后。内存地址和移动对象。


答案 2

对象的 javadoc 指定

这通常是通过将对象的内部地址转换为整数来实现的,但 JavaTM 编程语言不需要这种实现技术。

如果一个类覆盖了hashCode,这意味着它想要生成一个特定的id,这将(人们可以希望)具有正确的行为。

您可以使用 System.identityHashCode 获取任何类的 id。