假设我有一个班级员工:
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和==方法进行简要解释。
答案 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个方法时,你可以用适合你代码的方式编辑它们:)
希望我帮助过!