首頁 > Java > java教程 > 如何正確重寫 Java 中的 equals() 方法以進行自訂物件比較?

如何正確重寫 Java 中的 equals() 方法以進行自訂物件比較?

Barbara Streisand
發布: 2024-12-27 08:16:09
原創
414 人瀏覽過

How to Properly Override the equals() Method in Java for Custom Object Comparisons?

重寫Java中的Equals方法

在Java中,equals方法負責判斷兩個物件是否相等。預設情況下,equals 方法比較物件引用,這不是許多自訂類別所需的行為。要重寫equals 方法並定義自訂相等語義,應遵循以下準則:

  • 檢查null: 該方法應首先檢查傳遞的物件是否為null 並傳回如果是,則為false。
  • 檢查類型: 驗證傳遞的物件與呼叫物件的類型相同。如果不是,則傳回 false。
  • 比較欄位:決定定義相等性的相關欄位並比較它們的值。
  • 使用運算符優先級:使用運算符優先級,以確保在使用之前檢查潛在的空值

解決方案:

提供的程式碼嘗試使用equals方法比較整數欄位(年齡),此方法僅適用於字串。若要修正此問題,應將年齡欄位的相等性檢查替換為使用== 運算子的比較:

...
} else {
    People otherPeople = (People) other;
    result = name.equals(other.name) && other.age == age;
}
...
登入後複製

用法:

以下程式碼示範如何使用重寫的equals方法:

...
// Add several Person objects to an ArrayList
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));

// Compare each pair of Person objects using the overridden equals method
for (int i = 0; i < people.size() - 1; i++) {
    for (int y = i + 1; y <= people.size() - 1; y++) {
        boolean check = people.get(i).equals(people.get(y));
        System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
        System.out.println(check);
    }
}
...
登入後複製

此程式碼將產生以下內容輸出:

-- Subash Adhikari - VS - K false
-- Subash Adhikari - VS - StackOverflow false
-- Subash Adhikari - VS - Subash Adhikari true
-- K - VS - StackOverflow false
-- K - VS - Subash Adhikari false
-- StackOverflow - VS - Subash Adhikari false
登入後複製

此輸出示範了重寫的 equals 方法根據名稱和年齡欄位正確比較 Person 物件。

以上是如何正確重寫 Java 中的 equals() 方法以進行自訂物件比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板