在 Java 中,equals()
方法和 ==
运算符都可以用于比较两个对象是否相等,但它们的比较方式是不同的。
==
运算符比较的是两个对象的引用地址(指针),也就是说,它们是否指向同一块内存地址。例如:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println(str1 == str2); // true,两个对象引用同一字符串对象
System.out.println(str1 == str3); // false,两个对象引用不同的字符串对象
在这个例子中,str1
和 str2
引用同一字符串对象(“hello”),因此 ==
返回 true。str1
和 str3
引用不同的字符串对象,因此 ==
返回 false。
equals()
方法比较的是两个对象的内容(属性值),也就是说,它们的属性值是否相等。例如:
public class Person {
private String name;
private int age;
// getters and setters
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
}
Person person1 = new Person("Tom", 18);
Person person2 = new Person("Tom", 18);
Person person3 = new Person("Bob", 20);
System.out.println(person1.equals(person2)); // true,两个对象属性值相等
System.out.println(person1.equals(person3)); // false,两个对象属性值不相等
在这个例子中,我们重写了 equals()
方法,比较了两个 Person
对象的 name
和 age
属性是否相等。person1
和 person2
的属性值相等,因此 equals()
方法返回 true。person1
和 person3
的属性值不相等,因此 equals()
方法返回 false。
需要注意的是,当比较两个对象是否相等时,使用 ==
运算符比较的是两个对象的引用是否相等,而使用 equals()
方法比较的是两个对象的内容是否相等。如果我们要比较两个对象的属性值是否相等,应该重写该对象的 equals()
方法,并在其中自定义比较语义。