equals()方法应该具以下特性:
1.自反的:对任何x,x.equals(x)应该返回true;
2.对称的:对于x,y,x.equals(y)返回true,当且仅当y.equals(x)返回true;
3.传递的:对x,y,z,x.equals(y)和y.equals(z)返回true,则x.equals(z)返回true;
4.一致的:对x,y,多次调用x.equals(y)应该一致的返回true或false,如果在等价比较中的信息没有被改变的;
5.对于非空的对象x,x.equals(null)应该返回false;
根据此和一,以下语句通常会被写在equals()方法里:
if(obj == this) return true;
程序员通常会写如下语句:
if( obj instanceOf 当前类){
//todo
}
如果当前类没有子类,则没有问题。否则有可能与规则2相冲突,因为子类对象也是父类对象的一个实例。
解决方法:
if(obj == null) return false;
if(obj.getClass() != this.getClass()){
return false;
}
//TODO