首页 > Java > java教程 > 当'hashCode()”方法未被重写时,它在 Java 中的行为如何?

当'hashCode()”方法未被重写时,它在 Java 中的行为如何?

Barbara Streisand
发布: 2024-11-03 00:36:02
原创
885 人浏览过

How does the `hashCode()` method behave in Java when it's not overridden?

Java 中的对象哈希代码默认行为

如果 Java 对象中未显式重写 hashCode() 方法,则调用 hashCode()根据 Java 虚拟机 (JVM) 的实现,该对象会产生特定结果。

HotSpot JVM 默认行为

在 HotSpot JVM 中,默认行为如下:

  • 第一次调用:生成一个随机数并存储在对象头中。
  • 后续调用:从对象标头中提取随机数。

默认情况下,此随机数与对象的内容或位置没有关联。

可自定义行为

hashCode() 方法的行为可以使用 -XX:hashCode=n HotSpot JVM 选项进行自定义。此选项采用以下值:

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

特殊注意事项

  • 即使使用 -XX:hashCode=4,哈希码也可能并不总是指向到对象地址。对象创建后可以移动,但哈希码保持不变。
  • 对象地址可能分布不均,使用 -XX:hashCode=4 选项时会导致哈希表不平衡。

以上是当'hashCode()”方法未被重写时,它在 Java 中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板