在debuggingJava时解密variables信息

我正在使用IntelliJ IDEA 8来debugging一些Java,但是这个问题可能适用于所有的Javadebugging器。 在variables列表中,它们显示为:

myVariable = {some.package.SomeClass@12345}

我很好奇类名后的数字。 这个数字到底是什么? 两个variables是否有相同的数字,如果它是相同的基础对象被引用?

提前致谢。

这是由JVM报告的objectId ,详情请参阅JDWP规范 。

唯一标识目标虚拟机中的对象。 一个特定的对象在JDWP命令中只有一个对象标识,并且在其整个生命周期内(或者直到对象标识被明确地处理)回复。 ObjectID不会被重用来标识一个不同的对象,除非它已被明确地处置,不pipe被引用的对象是否被垃圾收集。 objectID为0表示空对象。 请注意,对象ID的存在不会阻止对象的垃圾回收。 任何尝试使用其对象ID访问垃圾回收对象都将导致INVALID_OBJECT错误代码。 使用DisableCollection命令可以禁用垃圾收集,但通常不需要这样做。

它看起来像是一个直接的toString结果,当一个类没有用自己的实现覆盖toString的时候产生。

如果是这种情况(您可以通过覆盖toString来查看并查看是否得到不同的输出),那么根据Object的Java文档( http://java.sun.com/j2se/1.5.0/docs/api /java/lang/Object.html)toString的默认实现是:

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

哈希码 – 你提到的数字 – 非常棘手。 同样,从Object的Java文档中,hashcode是通过以下合同实现的:

 The general contract of hashCode is: * Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. * If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. * It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables. 

所以,简短的回答,你的数字并不意味着它是相同的对象引用。 他们可能有相同的值存储,但即使这不是给定的。