String str="abc";
for (int i = 0; i < 100; i++)
{
System.out.println(str.hashCode());
}
1)Stringは不変のクラスであり、そのhashCodeはプライベート変数hashにキャッシュされます。
2)文字列strはリテラルであるため、作成されたこの文字列オブジェクトは、permgenスペースのstringpoolに追加されます。したがって、strを参照するときは、同じオブジェクトが得られるはずです。
文字列のhashCodeメソッドでプロセスをデバッグし、str.hashCode()を呼び出すときに上記の2つのポイントに基づいて、ハッシュの計算を1回だけ開始し、次の99回は文字列の「キャッシュされたハッシュプライベート変数」を返す必要があります。物体"。ポイント1ではうまくいきません。この振る舞いについて教えてもらえますか?
これをデバッグすると、hashCodeが100回計算され、hashCode値を出力して、オブジェクトが同じhashCodeを持っているかどうかを確認します。