我们可以在 Java 中重写 equals() 方法吗?

java 8object oriented programmingprogramming

为了比较两个对象,对象类提供了一个名为 equals() 的方法,此方法接受一个对象并将其与当前对象进行比较。如果这两个对象的引用相等,则返回 true,否则此方法返回 false。

示例

在下面的例子中,我们有一个类 Employee,它有两个变量 name、age 和一个参数化构造函数。

从主方法中,我们通过传递相同的值来创建两个对象,并使用 equals() 方法比较这两个值。

由于 Object 类的 equals() 方法仅在两个对象的引用相等时才返回 true,因此此程序返回 false。

import java.util.Scanner;
class Employee {
   private String name;
   private int age;
   Employee(String name, int age){
      this.name = name;
      this.age = age;
   }
}
public class EqualsExample {
   public static void main(String[] args) {
      Employee emp1 = new Employee("Jhon", 19);
      Employee emp2 = new Employee("Jhon", 19);
      //比较两个对象
      boolean bool = emp1.equals(emp2);
      System.out.println(bool);
   }
}

输出

false

重写 equals() 方法

由于 Object 是 java 中所有类的超类,因此您可以重写 equals 方法并编写自己的实现

示例

class Employee {
   private String name;
   private int age;
   Employee(String name, int age){
      this.name = name;
      this.age = age;
   }
   public boolean equals(Object obj) {
      if (obj == this) {
         return true;
      }
      if (!(obj instanceof Employee)) {
         return false;
      }
      Employee emp = (Employee) obj;
      return name.equals(emp.name)&& Integer.compare(age, emp.age) == 0;
   }
}
public class EqualsExample {
   public static void main(String[] args) {
      Employee emp1 = new Employee("Jhon", 19);
      Employee emp2 = new Employee("Jhon", 19);
      //比较两个对象
      boolean bool = emp1.equals(emp2);
      System.out.println(bool);
   }
}

输出

true

相关文章