我正在尝试理解
hashCode()
方法的本地实现。这个方法到底返回什么?它是一个内存地址还是一个随机值?hashCode()
方法的本地实现。这个方法到底返回什么?它是一个内存地址还是一个随机值?.hashCode()
本地实现取决于JVM。
例如,HotSpot有6个Object.hashCode()
的实现。您可以使用命令行通过-XX:hashCode=n
标志选择它,其中n:
0 - Park-Miller RNG(默认)
1 - f(address,global_statement)
2 - 常量1
3 - 串行计数器
4 - 对象地址
5 - 线程本地Xorshift
从文档中得知:
对于不同的对象,Object类定义的hashCode方法会返回不同的整数,尽可能做到这一点。(通常通过将对象的内部地址转换为整数来实现,但是Java编程语言不要求使用此实现技术。)
因此,它可能与内存地址有关,但不一定是 - 而且绝不能假设它与内存有任何关系。
你对散列码的操作不应该关心这个。你唯一需要了解的是:
你的答案在这里。如文档所述:
尽可能地,由Object类定义的hashCode方法确实会为不同的对象返回不同的整数。(通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言并不要求采用此实现技术。)