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;