==和 equals 的区别?

== : 用于判断两个对象的地址是否相等,即判断两个对象是否为同一个对象。对于基本数据类型,== 比较的是它们的值;对于引用数据类型,== 比较的是它们在内存中的地址。

equals() : 用于判断两个对象是否相等。它通常有两种情况:

  • 默认情况:如果一个类没有覆盖(重写)equals()方法,那么它会继承自Object类的equals()方法。在这种情况下,使用equals()方法进行比较等同于使用==进行比较,即比较对象的内存地址。
  • 自定义情况:如果一个类覆盖了equals()方法,通常是为了比较对象的内容是否相同,即自定义了相等的标准。比如对于Person类,我们可能认为当两个人的编号和姓名相同的时候,它们就是同一个人。

举个例子,对于Person类的自定义equals()方法,我们可以根据编号和姓名来判断两个人是否相等。

public class Person {
    private String no;
    private String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return Objects.equals(no, person.no) &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(no, name);
    }
}

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题