通过围绕SO的一些答案,似乎对不同对象的默认hashCode()
返回值有各种看法:有人说它运行相同的算法,有人说它基于内存位置。
尽管如此,我还是进行了一些测试,在不同的Android模拟器上调用默认的myCustomObject.hashCode()
,并且看来,在每个模拟器中,hashCode
始终是相同的(即使在重启后也是如此)它),但每个人都不相同。
基于此,我不确定它是否实际上基于算法;或者该算法是否包含与其运行位置相关的信息,甚至是否确实基于内存(我对此表示怀疑,因为它在重启后将具有相同的值)。
答案 0 :(得分:2)
关于Object
的{{1}}的所有信息是what the JavaDoc says。这部分可能是最相关的:
在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (在某个时间点,hashCode可能会或可能不会实现为对象内存地址的某些功能。)
因此,它可能是唯一的,但不能保证是唯一的,并且您不能假设它会是唯一的。对于任何给定的“内存位置”定义,它可能是对象的存储位置的“某种功能”,也可能不是。或者它可能是在创建对象时分配给该对象的一些升序数字,等等。您不知道无需深入研究您正在使用的JDK / JVM的源代码(hashCode
是一个hashCode
函数,因此JDK中的native
在这里无济于事),此外,没有务实有益于了解。
我不确定它是否实际上基于算法;或者该算法是否包含与其运行位置相关的信息,甚至是否确实基于内存(我对此表示怀疑,因为它在重启后将具有相同的值)。
它可能是JVM堆中的索引,每次使用同一程序时,该索引都将位于同一位置。
但是再说一次:您不知道,知道也没有务实的好处。