首页  >  文章  >  Java  >  “hashCode()”方法如何适用于 Java 中的非重写对象?

“hashCode()”方法如何适用于 Java 中的非重写对象?

Barbara Streisand
Barbara Streisand原创
2024-10-31 17:08:30133浏览

How Does the `hashCode()` Method Work for Non-Overridden Objects in Java?

了解 Java 中非重写对象的哈希代码

在 Java 中,对象从 Object 类继承 hashCode() 方法。如果不重写此方法,它将提供用于生成对象的唯一标识符的默认实现。

默认哈希代码是什么?

当 hashCode()方法没有被重写,HotSpot JVM 遵循特定的行为来生成哈希代码:

  1. 首次调用时的随机数:在首次调用 hashCode() 或 System.identityHashCode 时,会生成一个随机数并将其存储在对象的标头中。
  2. 后续调用:后续调用检索此存储的

JVM 哈希代码选项

可以使用 -XX:hashCode=n HotSpot JVM 选项自定义默认哈希代码生成的行为。可能的值包括:

  • 0:使用全局随机生成器(Java 7 中默认)
  • 5:使用线程本地异或移位随机生成器(Java 8 中默认)
  • 1:使用对象指针与随机值混合(GC 周期之间稳定)
  • 2:始终使用1
  • 3:使用自动递增数字
  • 4:使用修剪为 32 位的对象指针

注意: 即使使用 -XX:hashCode =4,哈希码可能并不总是指向确切的对象地址,因为对象可以在内存中移动。此外,对象地址分布不均匀,可能会导致哈希表不平衡。

因此,如果您需要对象的特定哈希代码行为,请务必考虑重写 hashCode() 方法。

以上是“hashCode()”方法如何适用于 Java 中的非重写对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn