【发布时间】:2025-12-11 09:35:01
【问题描述】:
我有一个学校课程:
public class School {
private String name;
private int id;
private boolean isOpen;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isOpen() {
return isOpen;
}
public void setOpen(boolean isOpen) {
this.isOpen = isOpen;
}
}
然后我创建了两个School实例,比较两个实例的相等性:
public static void main(String[] args) {
//school1
School school1 = new School();
school1.setId(1);
school1.setName("schoolOne");
//school2
School school2 = new School();
school2.setId(1);
school2.setName("schoolOne");
//result is false , why?
System.out.println("school1 == school2 ? " + school1.equals(school2));
}
即使我将相同的id 和name 设置为school1 和school2 实例,但school1.equals(school2) 返回false,为什么?
【问题讨论】:
-
您没有覆盖类中的 equals 方法。所以你得到默认行为,即
public boolean equals(Object obj) {return (this == obj);}。由于您正在创建两个全新的对象,因此它返回 false。如果你已经完成School school2 = school1;,它会输出true。 -
如果您使用的是 Eclipse,您可以通过右键单击类 > Source > Generate Hashcode() 和 equals() 来生成
equals()方法 -
看看这个问题的答案它可能对你有帮助*.com/questions/16069106/…
标签: java