在Java中實現equals方法時應遵循的指南?


為了比較兩個物件,Object類提供了一個名為equals()的方法,此方法接受一個物件並將其與當前物件進行比較。

如果這兩個物件的引用相等,則返回true;否則,此方法返回false。

但是,此方法只有在兩個引用都指向同一個物件時才返回true。實際上,如果兩個物件的內容相等,它應該返回true。

示例

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);
      //Comparing the two objects
      boolean bool = emp1.equals(emp2);
      System.out.println(bool);
      Employee emp3 = emp1;
      boolean bool2 = emp1.equals(emp3);
      System.out.println(bool2);
   }
}

輸出

false
true

重寫equals()方法

為了解決這個問題,您可以重寫equals()方法並比較兩個物件,但是,在Java中,要使兩個物件相等,它們必須處於等價關係中,這意味著equals方法應該檢查三個條件:

  • 自反性 - a=a;

    使用此方法將物件與其自身進行比較時,結果應為true。

  • 對稱性 - 如果a=b,則b=a;

    obj1.equals(obj2)的值應等於obj2.equals(obj1)。即,如果obj1.equals(obj2)返回true,則obj2.equals(obj1)必須返回true。

  • 傳遞性 - 如果a=b,b=c,則a=c;;

    如果obj1.equals(obj2)和obj2.equals(obj3)的值為true,則obj1.equals(obj3)的值必須為true。

在equals中將物件與當前物件進行比較時,需要檢查以下條件。

  • 給定的物件不應為null。
if(obj == null ){
   return false;
}
  • 給定的物件應該是當前類的物件。
if(this.getClass() != obj.getClass()){
   return false;
}
  • 給定的物件應該等於當前物件。
if(this == obj){
   return true;
}
  • 當前物件的例項變數應該等於給定物件的例項變數。
Employee emp = (Employee)obj;
if(this.name != emp.name|this.age != emp.age){
   return false;
}

示例

如果您在equal方法中重寫上面的示例,包括上面指定的條件,那麼它將檢查給定的物件是否等於當前的employee物件。

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 == null ){
         return false;
      }
      if(this.getClass() != obj.getClass()){
         return false;
      }
      if(this == obj){
         return true;
      }
      Employee emp = (Employee)obj;
      if(this.name != emp.name||this.age != emp.age){
         return false;
      }
      return true;
   }
}
public class EqualsExample {
   public static void main(String[] args) {
      Employee emp1 = new Employee("Jhon", 19);
      Employee emp2 = new Employee("Jhon", 19);
      //Comparing the two objects
      boolean bool = emp1.equals(emp2);
      System.out.println(bool);
      Employee emp3 = emp1;
      boolean bool2 = emp1.equals(emp3);
      System.out.println(bool2);
   }
}

輸出

true
true

更新於:2020年7月2日

147 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.