读Effective Java的笔记

1.重写equals方法需满足几个约定:自反性(这是最简单的,仅意味着对象必须等于自身)、对称性(a.equals(b) == true, 那b.equals(a)也应该== true)、传递性(a.equals(b) == true; b.equals(c) == true,那a.equals(c)也应该== true)、一致性(如果a.equals(b) == true,那么多次执行a.equals(b)也应该== true)。然而事情不总是完美的,“我们无法在扩展可实例化的类的同时,既增加新的值组件,同时又保留equals约定”,这是面向对象语言中关于等价关系的一个基本问题。

2. 重写equals方法必须同时重写hashCode方法。重写规则为:

a. 声明一个int变量并命名为result,初始化为对象中第一个关键域(也就是第一个属性)的散列码

b. 剩下的每一个关键域都完成以上步骤,如果是基本类型,则用Type.hashCode()方法,Type指的是装箱基本类型的类。如果是数组,则把每一个元素当成一个关键域来处理,可以用Arrays.hashCode()方法

1 public int hashCode(){
2         int result = Integer.hashCode(x);
3         result = result * 31 + Integer.hashCode(y);
4         result = result * 31 + Integer.hashCode(z);
5         return result;
6     }

猜你喜欢

转载自www.cnblogs.com/LittleMike/p/11735000.html