我在同一台机器上持续运行这个程序:
class Test {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.hashCode());
}
}
每次在我的机器上运行程序(Windows 7 64位),结果都相同:4384790。
在另一台机器上(Windows server 2008, 64位),大多数情况下会给我1671711。但有时结果是11394033。
我在我的机器上使用Java HotSpot(TM) Client VM 1.6.0_26/1.6.0_33运行程序。
我已经阅读了Object类的文档:
“尽可能合理地说,由Object类定义的hashCode方法确实为不同对象返回不同的整数。(通常通过将对象的内部地址转换为整数来实现,但这种实现技术不是JavaTM编程语言所必需的。)”
但如果hashCode()确实是通过将对象的内部地址转换为整数来实现的,我仍然不理解为什么Java虚拟机每次运行时都分配相同的地址给Test对象。
默认的hashCode()操作方式是否已知?
Object.hashCode()
根本不使用对象的地址)。 - NPE