📜  用示例在Java中设置 equals() 方法(1)

📅  最后修改于: 2023-12-03 14:56:24.154000             🧑  作者: Mango

在Java中设置equals()方法

在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对象是否相等。我们做了以下几个步骤:

  1. 首先判断传入的对象是否为null,如果是,则返回false。
  2. 接着判断当前对象和传入的对象是否引用同一个对象,如果是,则返回true。
  3. 然后判断传入的对象是否为Person类型,如果不是,则返回false。
  4. 最后比较两个Person对象的属性值是否相等,如果都相等,则返回true。

现在我们可以测试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()方法,以确保在使用哈希表等数据结构时能正确工作。