この Java チュートリアル では、不変オブジェクトは作成後にその状態を変更できないと述べています。
java.lang.String
フィールドを持つ
/** Cache the hash code for the string */
private int hash; // Default to 0
メソッドの最初の呼び出しで初期化されるhashCode()
ため、作成後に変更されます。
String s = new String(new char[] {' '});
Field hash = s.getClass().getDeclaredField("hash");
hash.setAccessible(true);
System.out.println(hash.get(s));
s.hashCode();
System.out.println(hash.get(s));
出力
0
32
String
不変と呼ぶのは正しいですか?