ホームページ > Java > &#&チュートリアル > カスタム オブジェクトを「==」および「.equals()」で比較すると、フィールド値が同じであっても「false」が返されるのはなぜですか?

カスタム オブジェクトを「==」および「.equals()」で比較すると、フィールド値が同じであっても「false」が返されるのはなぜですか?

DDD
リリース: 2024-12-25 03:11:09
オリジナル
462 人が閲覧しました

Why Does Comparing Custom Objects with `==` and `.equals()` Return `false` Even with Identical Field Values?

.equals() および == 演算子を使用したオブジェクトの比較

質問:

文字列フィールドを持つカスタム クラスで、なぜオブジェクト比較に == 演算子と.equals() メソッドは、フィールド値が同一であっても false を返しますか?

答え:

== 演算子はオブジェクト参照を比較し、比較対象のオブジェクトかどうかを判断します。メモリ内の同じオブジェクトです。一方、.equals() はオブジェクトの内容を比較します。

この場合、object1 と object2 は同じフィールドを持っていてもメモリ内で同じオブジェクトではないため、== を使用すると false になります。価値。オブジェクトがフィールド値に関して等しいかどうかを判断するには、.equals() を使用する必要があります。

改訂されたequals() メソッド:

equals() メソッド提供されたコードを修正して、フィールドの値を比較することができます:

public boolean equals(Object object2) {
    if (object2 instanceof MyClass) {
        MyClass otherClass = (MyClass) object2;
        return this.a.equals(otherClass.a);
    }
    return false;
}
ログイン後にコピー

追加注:

equals() をオーバーライドする場合、一般に、等しいオブジェクトが等しいハッシュ コードを持つという契約を維持するために hashCode() もオーバーライドすることをお勧めします。

以上がカスタム オブジェクトを「==」および「.equals()」で比較すると、フィールド値が同じであっても「false」が返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート