- 覆盖equals方法时,总要覆盖hashcode方法
- 对于对象中的关键域,转换为int值,然后取其hashcode
- boolean 转换为 1/2
- byte、char、short 向上转型
- long ->
(int)f^f>>>32
- float -> Float.floatToIntBits(f)
- double -> Double.doubleToIntBits(f)
- 对象引用 如果equals 比较了该域,则也需要调用该对象的hashcode方法,如果为空,则返回0
- 对于数组需要计算每一个元素的hashcode。
- 公式
hashcode=hashcode*31+c
- hashcode 初始值随意
- c为每一个关键域的hashcode值
- 31是因为这是个奇素数,现代CPU可以对31的乘法转换为移位和减法。
覆盖hashcode方法
最新推荐文章于 2022-04-18 12:25:05 发布