Por que a classe String é imutável, embora tenha um campo não final chamado “hash”

Eu estava lendo o item 15 deJava efetivo por Joshua Bloch. Dentro do Item 15, que fala sobre "minimizar a mutabilidade", ele menciona cinco regras para tornar os objetos imutáveis. Uma delas é tornar todos os campos finais. Aqui está a regra:

Faça todos os campos finais : Isso expressa claramente sua intenção de uma maneira que é aplicada pelo sistema. Além disso, é necessário garantir o comportamento correto se uma referência a uma instância recém-criada for passada de um encadeamento para outro sem sincronização, conforme explicado no modelo de memória [JLS, 17.5; Goetz06 16].

Eu sei que a classe String é um exemplo de uma classe imutável. Passando peloCódigo fonte Eu vejo que na verdade tem uma instância hash que não é final.

//Cache the hash code for the string
private int hash; // Default to 0

Como String se torna imutável então?

questionAnswers(5)

yourAnswerToTheQuestion