1、关于equals覆盖问题
覆盖,是为了表示逻辑相等,而不是引用指向的对象相同;
什么时候应该覆盖?
表示"值类",譬如Integer或者Date;
单例模式的类没必要覆盖。。。
equals方法的通用约定
①自反性x.equals(x)==true
②对称性y.equals(x)为true时,x.equals(y)也为true
③传递性x.equals(y)=true,y.equals(z)=ture,则z.equals(x)比为true
④一致性,多次调用x.equals(y)始终为true
equals覆盖时的告诫
①覆盖equals时总要覆盖hashCode
②不要企图让equals方法过分智能。。。
③不要讲equals声明中的Object类型转换为其他类型
2、覆盖hashCode
计算散列码的规则
①对于某个非0的常数,保存在int型变量中
②boolean类型,计算f?1:0;
③byte char int short 则计算(int)f
④long,计算(int)(f^(f>>>32))
⑤float,计算Float.floatToIntBits(f);
⑥double,Double.doubleToLongBits(f);
⑦对象的引用。。。不是很理解
⑧数组,每一个元素按照上面的规范进行处理,再进行组合
例如:int g = 13;
result = 31*result+g;