为什么默认对象的hashCode在不同的设备中返回不同的值?

问题描述 投票:0回答:1

通过查看SO周围的一些答案,似乎有各种各样的意见,关于默认hashCode()在不同对象上返回什么:有人说它运行相同的算法,有些人说它是基于内存位置。

尽管如此,我还是运行了一些测试,我在不同的Android模拟器上调用默认的myCustomObject.hashCode(),似乎在每个模拟器中,hashCode总是相同的(即使在重新启动它之后),但每个都不同。

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

java android algorithm memory hashcode
1个回答
2
投票

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

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (hashCode可能会或可能不会在某个时间点实现为对象的内存地址的某些功能。)

因此,它可能是独一无二的,但不能保证,你不能认为它会是。对于“内存位置”的任何给定定义,它可能是也可能不是对象内存位置的“某个函数”,或者它可能是在创建时分配给对象的某些递增数字等等。您不知道没有深入研究你正在使用的JDK / JVM的源代码(hashCode是一个native函数,所以JDK中的src.zip在这里没有帮助),而且知道没有实用的好处。

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

它可能是JVM堆中的索引,每次使用相同的程序都会在同一个地方。

但同样:你不知道,知道并没有实用的好处。

© www.soinside.com 2019 - 2024. All rights reserved.