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