equals() 总合同的哪一部分不满足我的 equals()
我对Java相当陌生,我只是想让我的头脑理解和方法。
我知道要使等式方法正确,它需要是:@Override
equals()
hashcode()
-
反身:
a.equals(a)
-
对称:然后
a.equals(b)
b.equals(a)
-
可传递:则
a.equals(b) && b.equals(c)
a.equals(c)
-
不为空:
! a.equals(null)
我正在努力确定在编写我的 equals 方法时,我是上述哪些属性,哪些是不令人满意的。
我知道日食可以为我生成这些,但是由于我还没有完全理解这个概念,写出来可以帮助我学习。
我已经写出了我认为正确的方法,但是当我检查日食生成的版本时,我似乎“遗漏”了一些方面。
例:
public class People {
private Name first; //Invariants --> !Null, !=last
private Name last; // !Null, !=first
private int age; // !Null, ! <=0
...
}
我写了:
public boolean equals(Object obj){
if (obj == null){
return false;
}
if (!(obj instanceof People)){
return false;
}
People other = (People) obj;
if (this.age != other.age){
return false;
}
if (! this.first.equals(other.first)){
return false;
}
if (! this.last.equals(other.last)){
return false;
}
return true;
}
与日食生成的对比
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
People other = (People) obj;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
if (age != other.age)
return false;
if (last == null) {
if (other.last != null)
return false;
} else if (!last.equals(other.last))
return false;
return true;
}
我错过了:
if (this == obj) return true;
if (getClass() != obj.getClass()) return false;
-
对于每个变量:
if (first == null) { if (other.first != null) return false; } else if (!first.equals(other.first)) return false;
我不确定什么是,我的暗示不正确?getClass()