ホームページ >Java >&#&チュートリアル >正確なオブジェクト比較のためにJavaでequals()メソッドをオーバーライドする方法は?

正確なオブジェクト比較のためにJavaでequals()メソッドをオーバーライドする方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-26 21:15:14473ブラウズ

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

オブジェクト比較のための Java でのquals() メソッドのオーバーライド

Java では、equals() メソッドを使用して 2 つのオブジェクトかどうかを判断できます。等しいです。デフォルトでは、equals() はオブジェクト参照を比較しますが、これは必ずしも望ましい動作ではありません。 equals() メソッドをオーバーライドすると、独自の比較ロジックを定義できます。

シナリオ:

次のような People クラスの equals() メソッドをオーバーライドしたいとします。 2 つのデータ フィールド: 名前と年齢。名前と年齢に基づいて人々のオブジェクトを比較することを目的としています。

カスタム 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 クラス内で、人の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。