📜  Java中的简短 equals() 方法和示例(1)

📅  最后修改于: 2023-12-03 15:02:03.017000             🧑  作者: Mango

Java中的简短 equals() 方法和示例

在Java中,equals() 方法是用于比较两个对象是否相等的方法。默认情况下,equals() 方法会比较两个对象的引用,判断它们是否引用同一个内存地址,而不是比较它们的内容。然而,很多时候,我们需要根据对象的实际内容来判断它们是否相等。

为了满足这种需求,我们可以重写 equals() 方法,以根据对象的具体属性来决定它们是否相等。

重写 equals() 方法的规则

重写 equals() 方法应该遵循以下规则:

  1. 对称性:如果 x.equals(y) 返回 true,则 y.equals(x) 也应该返回 true。
  2. 反射性:对于任意非 null 的引用值 x,x.equals(x) 应该返回 true。
  3. 传递性:如果 x.equals(y) 和 y.equals(z) 都返回 true,则 x.equals(z) 也应该返回 true。
  4. 一致性:如果两个对象没有发生变化,多次调用 x.equals(y) 应该返回相同的结果。
  5. 对于任意非 null 的引用值 x,x.equals(null) 应该返回 false。
示例

以下是一个示例,展示了如何重写 equals() 方法来比较两个自定义对象的内容是否相等。

public class Employee {
    private String name;
    private int age;
    private String department;

    // 省略构造函数和其他方法

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Employee employee = (Employee) obj;
        return age == employee.age && Objects.equals(name, employee.name) && Objects.equals(department, employee.department);
    }

    // 省略hashCode() 方法
}

在上述示例中,我们重写了 equals() 方法来比较两个 Employee 对象的 nameagedepartment 属性是否相等。如果这三个属性都相等,则认为两个对象相等。

注意,我们使用了 Objects.equals() 方法来比较两个字符串是否相等,这是因为在Java中,字符串的比较应该使用 equals() 方法而不是 == 操作符。

重写 equals() 方法后,我们还应该重写 hashCode() 方法以确保保持一致性。但本文的主题是 equals() 方法,故在这里不做展开。

在实际使用中,我们可以这样比较两个对象是否相等:

Employee employee1 = new Employee("John", 30, "IT");
Employee employee2 = new Employee("John", 30, "IT");

if (employee1.equals(employee2)) {
    System.out.println("两个对象相等");
} else {
    System.out.println("两个对象不相等");
}

根据重写的 equals() 方法,上述代码会输出 "两个对象相等"。

这是一个非常简单的 equals() 方法示例,实际上我们可以根据具体的需求来比较更多或者更复杂的属性。无论如何,重写 equals() 方法通常是实现自定义类的比较功能的必要步骤。