Object.hashCode()
(すべてのオブジェクトのデフォルト実装)の実装がオブジェクトのメモリアドレスを与えると主張されることがよくあります。その主張は、Object.to String()によって生成される固有の出力の説明に添付されることがよくあります。Object.toStringまたはObject.hashCodeはオブジェクトのメモリアドレスを指定します
例としてhereを参照してください。
これは確かにではなく、私が知っているJVM/JREの場合はです。特に、アドレスは通常64ビットです。しかし、ガベージコレクタもオブジェクトを再配置するため、アドレスが変更されます。私はオブジェクトの初期のメモリアドレスになることができるという主張を見てきました。しかし、多くのオブジェクトが同様のアドレスを持つようになると、ハッシュコードの選択肢としては貧弱なものになります。
広く使用されているJVM/JREが、オブジェクトの(初期)メモリアドレスであったか、存在していますか?
Object
クラスのJavaDocは、実装のhashCode
がメモリアドレスである可能性があることを示唆しています。しかし、私はそれが決して更新されていない陳腐化していると思う。
実際、現在のOracle JVMは、メモリアドレスを使用していません(ただし、そうするように構成することができます):
https://stackoverflow.com/a/16105878/545127
のhashCodeは、メモリ・アドレスであるという考えは、歴史的な加工品である:
https://stackoverflow.com/a/13860488/545127
私の質問は、どの広く使われているJVMは、その(デフォルト)implementaとしてメモリアドレスを使用(している)かどうかであります。
それは設定可能です。https://stackoverflow.com/questions/16105420/java-object-hashcode-address-or-random/16105878#16105878 – Boann
javadocがその文を含むように改訂されたときのSun JVMはおそらくでしょうか? (これを行う*現在の* JVMがあるかどうか尋ねることを意味しますか?) – meriton
も参照してください。http://stackoverflow.com/questions/13860194/what-is-an-internal-address-in-java – Raedwald