(面试题)==和equals区别

70 阅读1分钟
  • ==如果比较的是基本数据类型,那么比较的是字面量。如果比较的是引用类型,那么比较的是该对象在堆中的内存地址。
  • 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;
    }
}