1. ホーム
  2. java

[解決済み] .equalsと.hashCodeは私のクラスでどのように機能するのでしょうか?

2022-09-20 06:03:58

質問

自分のクラスがあるとします。

public class MyObj { /* ... */ }

いくつかの属性とメソッドを持っています。equalsやhashCodeは実装していません。

equalsとhashCodeを呼び出したら、デフォルトの実装は何でしょうか?Objectクラスから?そして、それらは何ですか?デフォルトのequalsはどのように動作するのでしょうか?デフォルトのhashCodeはどのように動作し、何を返すのでしょうか? ==は同じオブジェクトを参照しているかどうかをチェックするだけなので簡単ですが、equals()とhashCode()メソッドはどうでしょうか?

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

はい、デフォルトの実装はObjectのものです(一般的に言えば、equalsやhashCodeを再定義したクラスから継承した場合は、その実装を代わりに使用することになります)。

ドキュメントから。

equals

Object クラスの equals メソッドは、オブジェクトの同値関係を最も区別して実装します。つまり、任意の非 NULL 参照値 x と y に対して、このメソッドは次のように返します。 xとyが同じオブジェクトを参照している場合のみ、このメソッドはtrueを返します(x == yはtrueの値を持ちます)。

hashCode

合理的に実用的である限り、Objectクラスで定義されたhashCodeメソッドは、異なるオブジェクトのために異なる整数を返します。(これは通常、オブジェクトの内部アドレスを整数に変換することで実装されますが、この実装手法はJavaTMプログラミング言語では必須ではありません)。