我创建了一个名为employeeNo的Employee类。 我正在重写equals和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?
答案 0 :(得分:10)
System.out.println(p==p1);
不会隐式调用equals(
。它比较了这里不同的参考文献。使用:
System.out.println(p.equals(p1));
代替。
此外:
Employee p1 = new Employee();
p.setName("v");
p.setEmployeeNo(1);
使用p
,其中应使用p1
。
答案 1 :(得分:0)
错误可能在这一行:
if (this.employeeNo == other.employeeNo && this.name.equals(other.name)) {
return true;
}
如果展位true
相同,则此条件仅为employeeNr
。如果employeeNr
的类型为Integer
而非int
。
if is false becuase equals()不是calles。
a == b将检查iif对象是否相同