为什么两个员工的对象不平等?

时间:2013-09-05 17:01:36

标签: java object collections

我创建了一个名为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?

2 个答案:

答案 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对象是否相同

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