当 toString() 和 hashCode() 被覆盖时,如何在 java 中获取对象的“对象引用”?
我想在Java中打印对象的“对象引用”以进行调试。即,根据情况确保对象相同(或不同)。
问题是有问题的类继承自另一个类,该类覆盖了toString()和hashCode(),这通常会给我id。
示例情况:运行一个多线程应用程序,其中我(在开发期间)想要检查所有线程是否都使用资源对象的同一实例。
我想在Java中打印对象的“对象引用”以进行调试。即,根据情况确保对象相同(或不同)。
问题是有问题的类继承自另一个类,该类覆盖了toString()和hashCode(),这通常会给我id。
示例情况:运行一个多线程应用程序,其中我(在开发期间)想要检查所有线程是否都使用资源对象的同一实例。
你到底打算用它做什么(你想做什么与你需要打电话的东西有区别)。
hashCode
,如JavaDocs中所定义,说:
尽管合理实用,但由类 Object 定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但 Java™ 编程语言不需要这种实现技术。
因此,如果您使用来找出它是否是内存中的唯一对象,那么这不是一个好方法。hashCode()
System.identityHashCode
执行以下操作:
返回给定对象的哈希代码与默认方法 hashCode() 返回的哈希代码相同,无论给定对象的类是否覆盖 hashCode()。空引用的哈希代码为零。
对于你正在做的事情,这听起来像是你想要的......但是你想做什么可能不安全,这取决于库的实现方式。
这就是我如何解决它:
Integer.toHexString(System.identityHashCode(object));