equals()重写问题
在 List 中查找元素时,List 的实现类通过元素的equals()方法比较两个元素是否相等,因此,放入的元素必须正确重写 equals() 方法,Java标准库提供的 String、Integer 等已经重写了 equals() 方法;
编写 equals() 方法可借助 Objects.equals() 判断。
如果不在List中查找元素(通过元素查找元素),就不必重写==equals()==方法。
public class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age) {
this.age= age;
}
public int getAge(){
return age;
}
}
@Override
public boolean equals(Object o) {
if (o instanceof Student) {
Student std = (Student) o;
return Objects.equals(this.name, std.name) && this.age == std.age;
}
return false;
}
总结:
- 先用 instanceof 判断传入的待比较的Object是不是当前类型,如果是,继续比较,否则,返回false;
- 再确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等
- 对引用类型用 Objects.equals() 比较,对基本类型直接用==比较。