为什么默认对象的 hashCode returns 在不同的设备上有不同的值?

Why default object's hashCode returns different value in different devices?

通过查看周围的一些答案,对于不同对象的默认值 hashCode() returns 似乎有多种意见:有些人说 运行 是一样的算法,有人说它是基于内存位置的。

尽管如此,我已经 运行 进行了一些测试,其中我在不同的 Android 模拟器上调用默认 myCustomObject.hashCode() 并且似乎在每个模拟器中, hashCode 始终相同(即使在重新启动后也是如此)但每个都不同。

基于此,我不确定它是否真的基于算法;或者如果该算法包含一些与它的位置相关的信息 运行s 或者即使它确实是基于内存的(我对此表示怀疑,因为它在重新启动后将具有相同的值)。

关于 ObjecthashCode 你只知道 what the JavaDoc says。这部分可能是最相关的:

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)

因此,它可能是独一无二的,但不能保证是独一无二的,您也不能假设它会是。对于 "memory location," 的任何给定定义,它可能是也可能不是对象内存位置的 "some function",或者它可能是在创建时分配给对象的某个升序数字,等等。你不无需深入研究您正在使用的 JDK/JVM 的源代码就知道(hashCode 是一个 native 函数,因此 JDK 中的 src.zip 没有帮助在这里),而且知道也没有实际的好处。

I'm not sure if it is actually based on an algorithm; or if that algorithm contains some info related to where it runs or even if it's indeed memory based (which this I doubt so, since it will have the same value after rebooting).

它可能是 JVM 堆中的一个索引,对于相同的程序每次都会在相同的位置。

但是再说一次:你不知道,知道也没有实际好处。