このプログラムを同じマシンで継続的に実行します。
class Test {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.hashCode());
}
}
結果は、自分のマシン(Windows 7 64ビット)でプログラムを実行するたびに同じです:4384790
別のマシン(Windows Server 2008、64ビット)では、ほとんどの場合、:1671711が表示されます。ただし、結果が11394033になる場合もあります。
私のマシンでは、Java HotSpot(TM)クライアントVM 1.6.0_26/1.6.0_33でプログラムを実行しています。
Objectクラスのドキュメントを読みました。
合理的に実用的である限り、クラスObjectによって定義されたhashCodeメソッドは、個別のオブジェクトに対して個別の整数を返します。(これは通常、オブジェクトの内部アドレスを整数に変換することによって実装されますが、この実装手法はJavaTMプログラミング言語では必要ありません。)
しかし、hashCode()が実際にオブジェクトの内部アドレスを整数に変換することによって実装されている場合、JavaVMが実行するたびにテストオブジェクトに同じアドレスを割り当てる理由がわかりません。
デフォルトのhashCode()がどのように動作するかは正確にわかっていますか?