我正在阅读Joshua Bloch的Effective Java的第 15 条。在谈到“最小化可变性”的第 15 条中,他提到了使对象不可变的五个规则。其中之一是使所有字段最终。这是规则:
使所有字段最终确定:这以系统强制执行的方式清楚地表达了您的意图。此外,如果对新创建实例的引用在没有同步的情况下从一个线程传递到另一个线程,则必须确保行为正确,如内存模型 [JLS, 17.5; 格茨06 16]。
我知道 String 类是不可变类的一个例子。通过源代码,我发现它实际上有一个不是 final 的 hash 实例。
//Cache the hash code for the string
private int hash; // Default to 0
那么 String 是如何变得不可变的呢?