📅  最后修改于: 2023-12-03 14:56:24.154000             🧑  作者: Mango
在Java中,equals()方法被用于比较两个对象是否相等。默认情况下,它比较的是对象的引用地址。
例如,以下代码创建了两个不同的对象,然后比较它们:
String str1 = new String("Hello");
String str2 = new String("Hello");
if (str1.equals(str2)) {
System.out.println("str1 and str2 are equal");
} else {
System.out.println("str1 and str2 are not equal");
}
这将输出:
str1 and str2 are equal
这是因为String类覆盖了equals()方法来比较字符串的内容而不是引用地址。
继续上面的例子,让我们创建一个自定义对象Person,来演示如何设置equals()方法:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 覆盖equals()方法
public boolean equals(Object obj) {
if (obj == null) return false;
if (this == obj) return true;
if (!(obj instanceof Person)) return false;
Person that = (Person) obj;
return this.name.equals(that.name) && this.age == that.age;
}
}
在这个Person类中,我们覆盖了equals()方法来比较两个Person对象是否相等。我们做了以下几个步骤:
现在我们可以测试Person类的equals()方法:
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Alice", 25);
if (person1.equals(person2)) {
System.out.println("person1 and person2 are equal");
} else {
System.out.println("person1 and person2 are not equal");
}
这将输出:
person1 and person2 are equal
由于person1和person2的name和age属性都相等,所以equals()方法返回true。
总之,覆盖equals()方法可以使我们比较自定义对象时更灵活并符合我们的需求。但是需要注意的是,当覆盖equals()方法时,同时也要覆盖hashCode()方法,以确保在使用哈希表等数据结构时能正确工作。