这个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
不可变的说法是否正确?