如何获取覆盖hashCode()的对象的唯一ID?
当 Java 中的类不覆盖 hashCode() 时,打印该类的实例会给出一个不错的唯一编号。
Object 的 Javadoc 是关于 hashCode() 的:
尽管合理实用,但由类 Object 定义的 hashCode 方法确实为不同的对象返回不同的整数。
但是当该类覆盖hashCode()时,我如何获得其唯一编号?
当 Java 中的类不覆盖 hashCode() 时,打印该类的实例会给出一个不错的唯一编号。
Object 的 Javadoc 是关于 hashCode() 的:
尽管合理实用,但由类 Object 定义的 hashCode 方法确实为不同的对象返回不同的整数。
但是当该类覆盖hashCode()时,我如何获得其唯一编号?
System.identityHashCode(yourObject)将给出Object的“原始”哈希代码作为整数。唯一性不一定能得到保证。Sun JVM 实现将为您提供一个与此对象的原始内存地址相关的值,但这是一个实现细节,您不应依赖它。
编辑:答案修改了汤姆在下面的评论之后。内存地址和移动对象。
对象的 javadoc 指定
这通常是通过将对象的内部地址转换为整数来实现的,但 JavaTM 编程语言不需要这种实现技术。
如果一个类覆盖了hashCode,这意味着它想要生成一个特定的id,这将(人们可以希望)具有正确的行为。
您可以使用 System.identityHashCode 获取任何类的 id。