public boolean equals(object obj){
Name name=null;
if(obj instancesof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?
Name name=null;
if(obj instancesof Name){
name=(Name)obj;
if(name.firstname==this.firstname&&name.lastname==this.lastname){
return true;
}else return false;
}
return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?
所以也加入了最后一句,同Name基类比较
否则equals单向执行
就会出现a.equals(b)!=b.equals(a)
java语法规范要求equals方法具有5大特性:
(1)自反性:x.equals(x)为true;
(2)对称性:x.equals(y)为true,那么y.equals(x)也要为true
(3)传递性:x.equals(y)为true,y.equals(x)为true那么x.equals(z)也要为true;
(4)一致性:如果x和y引用没变,不管合时调用x.equals(y)结果相同;
(5)x非空x.equlas(null)为false;
你上面的代码如果不用super.equlas(obj)就违反了对称性规范```
就是说儿子==老子,那老子就必须==儿子```