栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java对象的默认hashCode()实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java对象的默认hashCode()实现

即使在这里有一些答案表明默认实现是基于“内存”的,这也是完全错误的。多年以来,情况并非如此。

在java-8下,您可以执行以下操作:

java -XX:+PrintFlagsFinal | grep hashCode

获取使用的确切算法(

5
默认)。

  0 == Lehmer random number generator,   1 == "somehow" based on memory address  2 ==  always 1  3 ==  increment counter   4 == memory based again ("somehow")  5 == read below

默认情况下(

5
),它使用的是Marsaglia XOR-Shift算法,与内存无关。

如果这样做,这并不是很难证明的:

 System.out.println(new Object().hashCode());

多次,始终在一个新的VM中-您将获得相同的值,因此Marsaglia XOR-Shift以种子(始终相同,除非其他代码不会对其进行更改)开头并由此开始工作。

但是,即使您切换到某些基于内存的hashCode,并且对象可能会四处移动(垃圾回收器调用),如何确保 GC移动了该对象 后仍
采用相同的hashCode ?提示:indentityHashCode和Object标头。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号