这个 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
?