[英]Why two objects of employee are not equal?
我創建了一個名為name和employeeNo的Employee類。 我重寫等於和hashcode方法。
@Override
public boolean equals(Object obj) {
final Employee other = (Employee) obj;
if (this.employeeNo == other.employeeNo && this.name.equals(other.name)) {
return true;
}
return false;
}
@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 53 * hash + this.employeeNo;
return hash;
}
我的考試課
Employee p = new Employee();
p.setName("v");
p.setEmployeeNo(1);
Employee p1 = new Employee();
p.setName("v");
p.setEmployeeNo(1);
System.out.println(p==p1); // Print false . why?
System.out.println(p==p1);
不會隱式調用equals(
。它比較此處的引用不同。使用:
System.out.println(p.equals(p1));
代替。
也:
Employee p1 = new Employee();
p.setName("v");
p.setEmployeeNo(1);
使用p
,其中應使用p1
。
錯誤可能在此行中:
if (this.employeeNo == other.employeeNo && this.name.equals(other.name)) {
return true;
}
僅當展位employeeNr
相同時,此條件才true
。 如果employeeNr
是Integer
類型,而不是int
類型。
如果為false,則因為equals()不被調用。
a == b將檢查i是否對象相同
e.equals(b)將調用equals()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.