equals()
方法来判断对象的相等性。 ==
运算符来比较两个对象的引用是否相等。 在编程过程中,我们经常需要比较对象的相等性。有时候我们只关心对象的内容是否相等,而不关心它们是否引用同一个对象。例如,在集合类中,我们需要根据对象的内容进行查找、删除等操作,此时就需要判断对象的相等性。另外,对于基本数据类型(如 int、char 等),直接使用==
运算符即可判断相等性,但对于对象则需要使用equals()
方法来判断相等性。
==
运算符比较两个对象的引用是否相等。如果要比较对象的内容是否相等,需要重写equals()
方法。在重写equals()
方法时,通常需要满足以下几个条件:
x.equals(x)
应该返回 true。 x.equals(y)
返回 true,则 y.equals(x)
也应该返回 true。 x.equals(y)
返回 true,并且 y.equals(z)
返回 true,则 x.equals(z)
也应该返回 true。 x.equals(y)
的结果应该保持一致。 x.equals(null)
应该返回 false。 ==
运算符比较两个对象的引用是否相等。当两个对象引用指向内存中的同一个对象时,它们是引用相等的。
public class Person {
private String name;
private int age;
// 构造方法、getter和setter省略
@Override
public boolean equals(Object obj) {
if (this == obj) { // 引用相等
return true;
}
if (obj == null || getClass() != obj.getClass()) { // 类型不同或为null
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name); // 内容相等
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Alice", 20);
Person p2 = new Person("Bob", 30);
Person p3 = new Person("Alice", 20);
System.out.println(p1.equals(p2)); // false,内容不相等
System.out.println(p1.equals(p3)); // true,内容相等
System.out.println(p1 == p3); // false,引用不相等
}
}
equals()
方法,可以根据对象的内容来判断相等性,而不仅仅是引用是否相等。这样可以更灵活地比较对象的相等性。 ==
运算符比较两个对象的引用是否相等,效率高。 equals()
方法,并满足一定的条件,才能正确判断对象的相等性。如果没有正确实现 equals()
方法,可能会导致错误的结果。 equals()
方法时,需要满足自反性、对称性、传递性、一致性和非空性等条件,以确保正确判断对象的相等性。 ==
运算符比较两个对象的引用时,需要注意是否真正需要比较对象的引用相等,而不是内容相等。 对象的相等和引用相等是编程中常用的概念。对象的相等通过重写equals()
方法来实现,可以根据对象的内容来判断相等性;引用的相等通过==
运算符来比较两个对象的引用是否相等。在使用时需要注意区分二者,并根据具体需求选择合适的方式进行比较。
[1]
首发博客地址: https://blog.zysicyj.top/
[2]
面试题手册: https://store.amazingmemo.com/chapterDetail/1685324709017001
[3]
系列文章地址: https://blog.zysicyj.top/categories/技术文章/后端技术/系列文章/面试题精讲/