1. ホーム
  2. java

[解決済み] Javaにおける==とequals()の違いは何ですか?

2022-03-14 22:58:37

質問

私がこのことを正しく理解しているかどうか、明らかにしたいと思います。

  • == は参照比較です。つまり、両方のオブジェクトが同じメモリ位置を指しています。
  • .equals() は、オブジェクト内の値の比較として評価されます。

どのように解決するのですか?

一般的に、ご質問の答えは「イエス」ですが、しかし......。

  • .equals(...) は、比較するように書かれているものだけを比較し、それ以上でも以下でもありません。
  • equals メソッドをオーバーライドしないクラスの場合、デフォルトは equals(Object o) メソッドをオーバーライドしている最も近い親クラスのメソッドを使用します。
  • 親クラスがオーバーライドを提供していない場合、最終的な親クラスであるObjectのメソッドがデフォルトとなります。 Object#equals(Object o) メソッドを使用します。Object API によれば、これは == つまり、これは真を返します。 もし 両方の変数が同じオブジェクトを参照している場合、その参照先が同じであれば、です。したがって、次のようなテストを行うことになります。 オブジェクトの同一性 であって 機能的平等 .
  • 常にオーバーライドすることを忘れないでください。 hashCode をオーバーライドした場合 equals のように、契約を破棄しないようにします。API に従って hashCode() メソッドで、2つのオブジェクト が同じであれば equals メソッドは、それらが等価であることを示す。その逆は ない は必ずしも正しくない。