首頁  >  文章  >  Java  >  Java程式比較兩個對象

Java程式比較兩個對象

王林
王林轉載
2023-08-31 15:45:121142瀏覽

Java程式比較兩個對象

介紹

在Java中,可以使用equals()方法來比較對象,該方法根據對象的屬性來判斷兩個對像是否相等。在Java中比較物件時,重寫類別中的equals()方法非常重要,以確保根據所需的屬性進行比較。

這個Java程式透過重寫equals()方法來比較兩個類型為Person的對象,根據它們的name和age屬性進行比較。首先使用equals()方法檢查物件是否屬於同一類,然後比較name和age屬性。如果兩個屬性都匹配,方法回傳true,表示物件相等。如果任何一個屬性不同,方法傳回false,表示物件不相等。

方法

有兩種標準方法

  • 使用 equals() 方法

    • 不覆蓋

    • 使用覆蓋

  • 使用 hashCode() 和 equals() 方法

範例1:覆寫equals()方法

在一個類別中重寫equals()方法允許根據物件的屬性進行自訂比較。

方法

  • 我們先定義一個Person類,其中包含兩個私有實例變數:name和age。

  • 我們為Person類別定義了一個建構函數,它接受一個名稱和年齡,並用這些值初始化實例變數。

  • 我們在Person類別中重寫了equals()方法,以便根據姓名和年齡比較兩個Person物件。 equals()方法接受一個Object參數,我們先檢查該參數是否不為空且是Person類別的一個實例。然後我們將該物件轉換為Person對象,並將其姓名和年齡屬性與目前物件的姓名和年齡屬性進行比較。

  • 在main()方法中,我們建立了兩個不同姓名和年齡值的Person物件。

  • 我們在第一個Person物件上呼叫equals()方法,將第二個Person物件當作參數傳入。 equals()方法傳回一個布林值,指示這兩個物件是否相等。

  • 最後,我們使用System.out.println()將比較的結果印到控制台

#
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;
   }
}

Explanation

的中文翻譯為:

解釋

在這個例子中,我們建立了兩個具有不同名稱和年齡的Person對象,然後呼叫第一個物件的equals方法來比較它與第二個物件。 equals方法在Person類別中定義,並檢查這兩個物件是否具有相同的名稱和年齡屬性。最後,我們將比較的結果印到控制台上。

輸出

Are the two objects equal? false

範例2:不覆寫equals()方法

沒有覆寫equals()方法,物件的比較是基於它們的參考而不是屬性。

方法

  • 我們先定義一個Person類,其中包含兩個私有實例變數:name和age。

  • 我們為Person類別定義了一個建構函數,它接受一個名稱和年齡,並用這些值初始化實例變數。

  • 在main()方法中,我們建立了兩個具有相同名稱和年齡值的Person物件。

  • 我們在第一個Person物件上呼叫equals()方法,並將第二個Person物件當作參數傳入。由於我們沒有在Person類別中重寫equals()方法,因此使用了從Object類別繼承的equals()方法的預設實作。此實作檢查兩個物件是否是同一個物件(即具有相同的記憶體位址),如果是,則傳回true。由於person1和person2物件有不同的記憶體位址,equals()方法傳回false。

  • 最後,我們使用System.out.println()將比較結果列印到控制台。

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;
   }
}

Explanation

的中文翻譯為:

解釋

在這個例子中,我們建立了兩個具有相同名稱和年齡的Person對象,然後呼叫equals方法來比較第一個物件和第二個物件。由於我們沒有在Person類別中重寫equals方法,所以使用了從Object類別繼承的預設實作。這個實作檢查這兩個物件是否是同一個物件(即具有相同的記憶體位址),如果是,則傳回true。由於person1和person2物件有不同的記憶體位址,equals方法傳回false。最後,我們將比較的結果列印到控制台。

輸出

Are the two objects equal? false

範例3:使用hashCode()和equals()方法

沒有覆寫equals()方法,物件的比較是基於它們的參考而不是屬性。

方法

  • 我們建立了兩個Person類別的對象,person1和person2,它們的名稱和年齡相同。

  • 我們接著在person1上呼叫hashCode()和equals()方法。

  • 在Person類別中,我們重寫了hashCode()方法,使用Objects.hash()方法基於物件的name和age屬性產生哈希碼。

  • 然后我们重写equals()方法,根据它们的姓名和年龄属性来比较两个Person对象。该方法首先检查对象是否属于同一类,如果是,则使用Objects.equals()方法检查它们的姓名和年龄属性是否相等。

  • 在main()方法中,我们使用&&运算符通过hashCode()方法检查person1和person2的哈希码是否相同,并且通过equals()方法返回true。

  • 最后,我们打印出一个消息,指示这些对象是否相等。

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 using hashCode and equals methods
      boolean areEqual = person1.hashCode() == person2.hashCode() && 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 int hashCode() {
      return Objects.hash(name, age);
   }
    
   @Override
   public boolean equals(Object obj) {
      if (this == obj)
         return true;
      if (!(obj instanceof Person))
         return false;
      Person other = (Person) obj;
      return Objects.equals(name, other.name) && age == other.age;
   }
}

Explanation

的中文翻译为:

解释

在这个例子中,我们创建了两个具有相同姓名和年龄的Person对象,然后调用第一个对象的hashCode()和equals()方法来与第二个对象进行比较。

在Person类中,我们重写了hashCode()和equals()方法,以便根据它们的name和age属性来比较对象。hashCode()方法返回name和age属性的组合的哈希码,equals()方法检查对象是否属于同一类,并且具有相同的name和age属性。

最后,我们使用&&运算符来检查两个对象的哈希码是否相同,并且equals()方法是否返回true。如果两个条件都为true,我们打印出对象相等的信息。否则,我们打印出对象不相等的信息。

输出

The two person objects are equal

结论

  • 这个Java程序使用equals()方法来比较两个Person对象的属性,该方法已在Person类中被重写。

  • 该程序展示了定制对象比较的重要性,并突出了Java在实现自定义比较逻辑方面提供的灵活性。

以上是Java程式比較兩個對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除