为什么在重启应用程序时为对象生成相同的哈希码?



我想弄清楚哈希码是如何生成的。我偶然发现了一个特性。正如我在基本实现中所理解的那样,hashCode生成了一些随机函数。我尝试生成hashCodes来查看hashCode的值。但我注意到,每次我开始测试哈希码是相同的:

public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(new Object().hashCode());
}
}

我总是看到相同的哈希码:

854507466
1316061703
490150701
1413246829
334203599
1372082959
1946403944
1131645570
209833425
532854629

为什么每次我运行测试时它们都是相同的?

将您的hashCodes与以下方法生成的hashCodes进行比较:

System.identityHashCode(Object x)

我的理解是,这是默认的实现,并从该对象的内存指针位置获取其编号,这将保证唯一性。

最新更新