基本概念:重写的equals一般都是用来判断逻辑上的相等, == 则是完全相等。
有些时候 equals 方法是不需要的 :
1、程序中没必要关心他提供的equals是否能够返回真正的逻辑相等,比如java.util.Random
2、单例或每个实例本身满足唯一性,比如说线程Thread{貌似是这个意思:Each instance of the class is inherently unique}
3、父类已经重写了equals,子类最好不要重写{后面会描述重写子类equals带来的纠结问题}
什么时候应该重写equals方法:
1、期望通过equals方法来判断两个对象是否是逻辑上相等。
2、想将对象用做map的key值或set的元素时,同时要重写hashCode方法。
接下来描述一下重写equals应当要满足的条件:
1. 自等:x.equals(x) == true 这个是最起码的要求
2. 对称:x.equals(y) == true ,必须有 y.equals(x) == true;
3. 传递:x.equals(y) == true,x.equals(z) == true ;必须有 y.equals(z) == true
4. 非空:x.equals(null) 应总是返回false;
5. 恒定(consistent),x.equals(y) 应恒返回true或false, 以支持用equals来判断对象是否被修改
|