我正在阅读Joshua Bloch撰写的有效Java第15项.在第15项中谈到"最小化可变性"时,他提到了使对象不可变的五条规则.其中之一就是让所有领域都是最终的.这是规则:
使所有字段成为最终字段:这清楚地以系统强制执行的方式表达您的意图.此外,如果对新创建的实例的引用在没有同步的情况下从一个线程传递到另一个线程,则必须确保正确的行为,如内存模型中所述[JLS,17.5; Goetz06 16].
我知道String类是一个不可变类的例子.通过源代码我看到它实际上有一个非最终的哈希实例.
//Cache the hash code for the string
private int hash; // Default to 0
Run Code Online (Sandbox Code Playgroud)
String如何成为不可变的呢?