重写hashCode()方法的基本规则
a、注意事项
1、同一个对象多次调用hashCode()方法应该返回相同的值
2、两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法应返回相等的值
3、对象中用作equals()方法比较标准的Field,都应该用来计算hashCode值
b、计算步骤
1、各数据类型field的计算方式
| Field类型 | 计算方式 |
| boolean | hashCode = (f?0:1); |
| 整数类型(byte、short、char、int) | hashCode = (int)f; |
| long | hashCode = (int)(f^(f>>>32)); |
| float | hashCode = Float.floatToIntBits(f); |
| double | long l = Double.doubleToLongBits(f); hashCode = (int)(l^(l>>>32)); |
| 普通引用类型 | hashCode = f.hashCode(); |
2、用第1步计算出来的多个hashCode值组合计算出一个hashCode值返回,如:
return f1.hashCode() + (int)f2;
3、为了避免直接相加产生偶然相等(两个对象的f1、f2 Field并不相等,但它们的和恰好相等),可以为各Field乘以任意一个质数后再相加。如:
return f1.hashCode() * 17 + (int)f2 * 13;

博客介绍了重写hashCode()方法的基本规则,包括注意事项和计算步骤。计算步骤涵盖各数据类型field的计算方式,以及用多个计算出的hashCode值组合返回一个值,还提到为避免偶然相等,可给各Field乘以质数后相加。
6666

被折叠的 条评论
为什么被折叠?



