Questa risposta fornisce un'indicazione che class String è dichiarato final per sicurezza thread, che non convincere.
Questa risposta non convince quando dice: And so, you make the classes final. There can be no mutable String, because its an immutable class and its final.
A causa,
sotto il campo con final modificatore,
/** The value is used for character storage. */
private final char value[];
in class String sarebbe sufficiente / indica che i dati memorizzati nell'oggetto creato sono supposti immutabili e thread-safe.
Quindi, class String è final non ha nulla a che fare con l'immutabilità o la sicurezza dei thread.
Ma non è chiaro, perché class String è dichiarato final ?
Perché, come per la definizione della classe sottostante, ha final modificatore:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
{ .... }
Quindi, class String non può essere ereditato.
Nonostante il campo value[] in class String sia dichiarato final , additionaly, qual è la necessità per class String di essere anche final ?
Nota: le risposte a questa domanda daranno un'idea dietro questa decisione progettuale