Perché la definizione 'class String' ha un modificatore 'finale'? [duplicare]

0

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

    
posta overexchange 17.06.2015 - 09:54
fonte

2 risposte

1

Hai risposto alla tua domanda nella tua domanda.

La stringa di classe non può essere ereditata perché ha un modificatore finale nella definizione della classe. Il modificatore finale fa proprio questo in una definizione di classe, dichiara una classe da cui non può essere ereditata, non ha nulla a che fare con l'immutabilità in questo caso.

La logica alla base di questo è che un programmatore può sottoclasse String, quindi ha un oggetto che "assomiglia" a una stringa (cioè può essere passato a metodi che accettano un argomento String) tuttavia è mutabile mentre la stringa dovrebbe essere immutabile.

    
risposta data 17.06.2015 - 10:14
fonte
0

Non importa che valore [] sia definitivo quando nessuno dei metodi su String lo è. Se la classe stringa non fosse definitiva, potrei derivare e sovrascrivere tutti i metodi e avere una stringa mutabile.

    
risposta data 17.06.2015 - 13:02
fonte

Leggi altre domande sui tag