首页 > 解决方案 > 为什么在重启应用程序时为 Object 生成相同的哈希码?

问题描述

我试图弄清楚哈希码是如何生成的。我偶然发现了一个功能。据我了解,在使用一些随机函数生成的基本实现 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

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

标签: javahashjvmhashcode

解决方案


将您的 hashCodes 与通过以下方式生成的 hashCodes 进行比较:

System.identityHashCode(Object x)

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


推荐阅读