ホームページ >Java >&#&チュートリアル >Javaで文字列フィールドと整数フィールドを持つオブジェクトのequals()メソッドを正しくオーバーライドする方法は?

Javaで文字列フィールドと整数フィールドを持つオブジェクトのequals()メソッドを正しくオーバーライドする方法は?

DDD
DDDオリジナル
2024-12-23 03:39:15837ブラウズ

How to Correctly Override the equals() Method in Java for Objects with String and Integer Fields?

Java での Equals メソッドのオーバーライド

Java では、equals メソッドは、オブジェクトが等しいかどうかを比較するための基本的なツールです。カスタム クラスで equals メソッドをオーバーライドする場合、そのクラスの 2 つのオブジェクトが同等であるかどうかを判断するための特定の基準を定義できます。

問題を理解する

次の点を考慮してください。名前と年齢のフィールドを持つ人物クラス。 2 つの Person オブジェクトが等しいかどうかを比較するには、equals メソッドをオーバーライドします。ただし、年齢フィールドが整数の場合、文字列を比較するように設計された平等メソッドを使用して比較しようとすると、エラーが発生する可能性があります。

解決策

この問題を解決するには、等価演算子 == を使用して整数を比較します。文字列と整数の両方の比較を処理する、オーバーライドされた平等メソッドの例を次に示します。

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }

    if (obj.getClass() != this.getClass()) {
        return false;
    }

    final Person other = (Person) obj;
    if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
        return false;
    }

    if (this.age != other.age) {
        return false;
    }

    return true;
}

この変更されたコードでは、

  • 最初に null チェックとクラス チェックを実行して、次のことを確認します。 2 つの有効な Person オブジェクトを比較しています。
  • 名前フィールドは次のとおりであるため、equals メソッドを使用して比較します。
  • 年齢フィールドは整数であるため、== 演算子を使用して比較します。

使用例

例を示します。オーバーライドされたequalsメソッドの使用方法:

public class Main {

    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("John Doe", 30));
        people.add(new Person("Jane Doe", 25));

        // Check for equality using the overridden equals method
        boolean equal = people.get(0).equals(people.get(1));
        System.out.println(equal); // Output: false
    }
}

この例では、 equals メソッドは、名前と年齢が異なる 2 つの Person オブジェクトが等しくないと正しく判断します。

以上がJavaで文字列フィールドと整数フィールドを持つオブジェクトのequals()メソッドを正しくオーバーライドする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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