Java程式比較兩個物件


Java中比較物件,檢查給定物件的屬性或雜湊值。如果兩個物件的屬性匹配,則它們相等。如果任何屬性不同,則表示物件不相等。

注意:不要使用等號運算子 (==) 來比較物件,因為它只檢查它們的記憶體位置。物件的比較應該基於屬性而不是位置。

如何在Java中比較物件?

要在Java中比較兩個物件,可以使用以下方法:

  • 透過重寫equals()方法
  • 不重寫equals()方法
  • 使用hashCode()和equals()方法

透過重寫equals()方法

預設情況下,equals()方法只比較物件的記憶體位置,即它檢查給定的物件是否引用同一個物件。但是,我們將重寫此方法並在其中加入我們自己的邏輯來比較給定物件的屬性。如果兩個物件相同,則返回true,否則返回false。

示例

以下示例演示瞭如何透過重寫equals()方法來比較兩個物件。

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Bob", 30);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
    
   @Override
   public boolean equals(Object obj) {
      if (obj == null) return false;
      if (!(obj instanceof Person)) return false;
      Person otherPerson = (Person) obj;
      return this.name.equals(otherPerson.name) && this.age == otherPerson.age;
   }
}

執行上述程式碼後,將產生以下結果:

Are the two objects equal? false

不重寫equals()方法

不重寫equals()方法,物件將基於它們的引用進行比較,而不是它們的屬性。

示例

在此示例中,我們演示瞭如何在不重寫equals()方法的情況下比較兩個物件。

public class ObjectComparator {
    
   public static void main(String[] args) {
        
      // Create two objects to compare
      Person person1 = new Person("Alice", 25);
      Person person2 = new Person("Alice", 25);
        
      // Compare the two objects
      boolean areEqual = person1.equals(person2);
      System.out.println("Are the two objects equal? " + areEqual);
   }
}

class Person {
    
   private String name;
   private int age;
    
   public Person(String name, int age) {
      this.name = name;
      this.age = age;
   }
}

執行此程式碼後,將給出以下輸出:

Are the two objects equal? false

使用hashCode()和equals()方法

hashCode()方法返回物件的雜湊碼值。雜湊碼是為Java中的每個物件生成的整數值。如果根據equals()方法兩個物件相等,則兩個相似的物件返回相同的雜湊值,否則返回不同的雜湊值。

示例

在下面的示例中,我們使用hashCode()和equals()方法在Java中比較兩個物件。

import java.util.*;
class Student {
  String name;
  int regd;
  Student(String name, int regd) { // Constructor
    this.name = name;
    this.regd = regd;
  }
  @Override
  public boolean equals(Object ob) { // overriding equals method
    if (this == ob) {
      return true;
    }
    if (ob == null || this.getClass() != ob.getClass()) {
      return false;
    }
    Student st = (Student) ob;
    // checking equality and returning values of name and regd of objects
    return this.name.equals(st.name) && this.regd == st.regd;
  }
  @Override
    public int hashCode() { // Overriding hashCode method
        return Objects.hash(name, regd);
    }
}
public class Main {
  public static void main(String[] args) {
    Student st1 = new Student("Ansh", 12105);
    Student st2 = new Student("Kumar", 11705);
    Student st3 = new Student("Ansh", 12105);
    if(st1.hashCode() == st2.hashCode()) { // checking hashcode value
        if(st1.equals(st2)) { // checking equality
            System.out.println("st1, st2 objects are same");
        }
    } else if(st1.hashCode() == st3.hashCode()) {
        if(st1.equals(st3)) {
            System.out.println("st1, st3 objects are same"); 
        }
    } else {
        System.out.println("All objects are different");
    }
  }
}

以下是上述程式碼的輸出:

st1, st3 objects are same

更新於:2024年7月31日

745 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.