混淆.equals方法

时间:2015-01-17 16:08:00

标签: java

假设我有一个班级员工:

class Employee{
    int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}

class Example {
     public static void main(String[] args){
         Employee e1=new Employee();
         Employee e2=new Employee();
         e1.setId(1);
         e2.setId(1);
         System.out.println(e2.equals(e1));
     }
}

为什么会出错? 它的原因是什么,需要对.equals和==方法进行简要解释。

2 个答案:

答案 0 :(得分:1)

如果两个对象是相同的引用,

==将进行比较,因此从您的示例中进行比较:

e1 == e1; // true
e1 == e2; // false

equals检查两个对象在逻辑上是否相等。默认实现与==一样,因此您需要提供自己的实现。对于您的示例,一个非常简单的实现将是:

 @Override
 public boolean equals(Object o) {
     if (this == o) return true;
     if (o == null || getClass() != o.getClass()) return false;

     Employee other = (Employee) o;

     return id == other.id;
 }

答案 1 :(得分:-1)

关于.equals()和==您可以阅读this thread以了解详情:-) 关于你的问题,如上所述,你需要在类Example(两者)中覆盖.equals()方法,原因是因为在Java中你可能已经知道,几乎所有东西都是Object的子类因此它使用了Object的方法,这就是.equals()方法的原因,即使它没有在你的代码中实现。 要覆盖.equals()要么手动执行,要么使用eclipse,请转到 Source>生成hashCode()和equals()... ,当代码中覆盖2个方法时,你可以用适合你代码的方式编辑它们:)

希望我帮助过!