- ==如果比较的是基本数据类型,那么比较的是字面量。如果比较的是引用类型,那么比较的是该对象在堆中的内存地址。
- equals是一个方法,如果该对象没有重写这个方法,源码中默认采用的就是==比较,所以通常会重写。我们重写是因为不想只根据内存地址判断两个对象是否相等,只要某些属性相同这两个对象就相等。另外给个建议,java中重写要求子类的参数必须和父类类型一致,所以只能传Object类型,所以自己重写的时候一定要用instance判断是否类型相等,像等后再强制类型转换。
源码
public class Object {
...
public boolean equals(Object obj) {
return (this == obj);
}
...
}
重写equals方法
class Student {
private String name;
private String sex;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof Student) {
Student student = (Student) o;
return Objects.equals(name, student.name) && Objects.equals(sex, student.sex);
}
return false;
}
}