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

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

Linda Hamilton
Linda Hamilton原創
2024-12-26 21:15:14477瀏覽

How to Override the equals() Method in Java for Accurate Object Comparison?

重寫Java 中的equals() 方法進行物件比較

在Java 中,equals() 方法可讓您確定兩個物件是否相同是平等的。預設情況下,equals() 比較物件引用,這並不總是所需的行為。重寫 equals() 方法可讓您定義自己的比較邏輯。

場景:

您想要重寫 People 類別中的 equals() 方法,該類別具有兩個資料欄位:姓名和年齡。您的目標是根據姓名和年齡來比較人物對象。

自訂 equals() 方法:

要覆寫 equals() 方法,您可以在People類別:

public boolean equals(People other) {
    // Null check and class check
    if (other == null || getClass() != other.getClass()) {
        return false;
    }

    // Downcast to People
    People otherPeople = (People) other;

    // Compare fields using == for primitive types (age) and equals() for objects (name)
    return name.equals(otherPeople.name) && age == otherPeople.age;
}

修復原始類型比較:

原始程式碼嘗試使用equals()來比較age字段,這是原始類型。基本型別有自己的相等比較運算子(在本例中為 ==)。修改age.equals(other.age)為age == other.age可以解決這個問題。

使用範例:

在Main類別中,一個Person的ArrayList物件被建立。 equals() 方法用於比較人和列印結果:

ArrayList<Person> people = new ArrayList<>();
people.add(new Person("Subash Adhikari", 28));
// ...

// Compare people objects
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));

        // Print comparison result
        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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn