为什么重写equals?
因为java类默认的equals是比较内存地址是否一致,那么比较的将是两个对象是否为同一个。但是这并不符合我们现实比较逻辑,就比如判断学生是否为同一个,如果内存中存在两个变量完全一致(学号,姓名等等信息)的两个对象,这在现实逻辑中就是同一个学生,但是如果不重写equals,那么比较的对象在堆中的地址,因为为两个对象所以地址是不同的,就会造成认为这两个同学不是同一个,很显然有问题出现。
重写equals()方法的步骤一般如下:
1、先用“==”判断是否相等。
2、判断equals()方法的参数是否为null,如果为null,则返回false;因为当前对象不可能为null,如果为null,则不能调用其equals()方法,否则抛java.lang.NullPointerException异常。
3、当参数不为null,则如果两个对象的运行时类(通过getClass()获取)不相等,返回false,否则继续判断。
4、判断类的成员是否对应相等。往下就随意发挥了。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return ID == student.ID && age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, ID, age);
}
本文解释了为何需要重写equals方法,强调了默认equals比较内存地址的问题,并提供了重写equals和hashCode的步骤实例。讨论了如何确保学生对象的正确比较,遵循实际逻辑而非地址一致。
1万+

被折叠的 条评论
为什么被折叠?



