0

我创建了一个具有 name 和 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?
4

2 回答 2

10
System.out.println(p==p1);

不会隐式调用equals(. 它比较了这里不同的参考文献。利用:

System.out.println(p.equals(p1));

反而。

还:

Employee p1 = new Employee();
p.setName("v");
p.setEmployeeNo(1);

uses pp1应该在哪里使用。

于 2013-09-05T17:02:41.247 回答
0

错误可能在这一行:

if (this.employeeNo == other.employeeNo && this.name.equals(other.name)) {
    return true;
}

true只有当展位相同时,此条件才会变为employeeNr。如果employeeNr是类型Integer而不是int

如果是假的,因为 equals() 不是调用。

a==b 将检查 i 对象是否相同

e.equals(b) 将调用 equals()

于 2013-09-05T17:09:22.527 回答