2012-04-19 13 views
31

Eventuali duplicati:
String and FinalHa senso definire una stringa finale in Java?

Da http://docs.oracle.com/javase/6/docs/api/java/lang/String.html posso leggere che:

Strings are constant; their values cannot be changed after they are created. 

questo significa che un final String in realtà non ha senso in Java, nel l'attributo final è in qualche modo ridondante?

+0

Dichiarare una variabile * final * non ha nulla a che fare con l'oggetto che gli è stato assegnato. –

+0

L'oggetto 'stesso 'è immutabile, ma il riferimento ad esso potrebbe essere mutabile. Rendere "definitivo" rende anche il riferimento immutabile. –

+0

Grazie per tutte le risposte e i commenti. Ci scusiamo per la duplicazione. – Campa

risposta

46

L'oggetto String è immutabile ma quello che è in realtà un riferimento a un oggetto String che potrebbe essere cambiata.

Ad esempio:

String someString = "Lala"; 

È possibile riassegnare il valore detenuta da questa variabile (per renderlo riferimento a una stringa differente):

someString = "asdf"; 

Tuttavia, con questo:

final String someString = "Lala"; 

Quindi la riassegnazione di cui sopra non sarebbe possibile e comporterebbe un errore in fase di compilazione.

17

final si riferisce alla variabile, non all'oggetto, quindi sì, ha senso.

ad es.

final String s = "s"; 
s = "a"; // illegal 
5

Ha senso. La parola chiave final impedisce future assegnazioni alla variabile. Quello che segue sarebbe un errore in Java:

final String x = "foo"; 
x = "bar" // error on this assignment 
3

I riferimenti sono finali, gli oggetti non lo sono. È possibile definire un oggetto mutabile come finale e modificarne lo stato. Ciò che garantisce in ultima analisi è che il riferimento che stai usando non può mai più puntare a un altro oggetto.