私は、Joshua Bloch 著『 Effective Java』の Item 15 を読んでいました。「可変性の最小化」について述べている項目 15 の中で、彼はオブジェクトを不変にするための 5 つのルールについて言及しています。それらの 1 つは、すべてのフィールドを final にすることです。ルールは次のとおりです。
Make all fields final : これにより、システムによって強制される方法で意図が明確に表現されます。また、新しく作成されたインスタンスへの参照が、メモリ モデル [JLS, 17.5; Goetz06 16]。
String クラスが不変クラスの例であることは知っています。ソース コードを調べてみると、実際には final ではないハッシュ インスタンスがあることがわかります。
//Cache the hash code for the string
private int hash; // Default to 0
では、どのように String が不変になるのでしょうか?