.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 サイトの他の関連記事を参照してください。