在 Eclipse 中,调试时,我看到变量后面附加了一个数字,例如 com.blah.blah.blah@82963fb
82963fb 是什么意思?是内存地址吗?
它是对象的“识别哈希码”值的十六进制呈现。它是方法返回的值System.identityHashCode(Object)
。此方法还用于为其类尚未覆盖该Object.hashcode()
方法的对象提供默认哈希码值。
它不一定是对象的内存地址,但实际上在身份哈希码和对象的>>a<<内存地址之间存在关系。(该值通常基于第一次调用该方法时对象的地址。对象的地址随后可能会改变,但哈希码值不会。)
(整个字符串由默认Object.toString()
方法生成。前面的部分@
是对象的完全限定类名。)
您看到的是 Object.toString() 方法的输出。其定义为:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
所以,你看到@
的是Integer.toHexString(hashCode())