2012-04-19 6 views
31

Mögliche Duplizieren:
String and FinalIst es sinnvoll, einen letzten String in Java zu definieren?

Von http://docs.oracle.com/javase/6/docs/api/java/lang/String.html kann ich das lesen:

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

Bedeutet dies, dass ein final String nicht wirklich Sinn in Java machen, in der Gefühl, dass das final Attribut irgendwie redundant ist?

+0

Das Deklarieren einer * Variablen * final hat nichts mit dem Objekt zu tun, das Sie zugewiesen haben. –

+0

Das 'Objekt' selbst ist unveränderlich, aber die Bezugnahme darauf könnte veränderbar sein. Wenn man es "final" macht, wird die Referenz ebenfalls unveränderlich. –

+0

Danke für alle Antworten und Kommentare. Entschuldigung für das Duplizieren. – Campa

Antwort

46

Das String Objekt ist unveränderlich, aber was es ist, ist eigentlich ein Verweis auf ein String Objekt, das geändert werden könnte.

Zum Beispiel:

String someString = "Lala"; 

Sie können den Wert von diesen Variablen gehalten neu zuweisen (es eine andere Zeichenfolge verweisen):

someString = "asdf"; 

jedoch mit diesem:

final String someString = "Lala"; 

Dann wäre die obige Neuzuweisung nicht möglich und würde zu einem Fehler bei der Kompilierung führen.

17

final bezieht sich auf die Variable, nicht das Objekt, ja ja, es macht Sinn.

z.B.

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

Es macht Sinn. Das Schlüsselwort final verhindert zukünftige Zuweisungen an die Variable. Folgendes wäre ein Fehler in Java:

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

Referenzen sind endgültig, Objekte sind nicht. Sie können ein veränderbares Objekt als endgültig definieren und dessen Status ändern. Letztendlich wird sichergestellt, dass die von Ihnen verwendete Referenz nie wieder auf ein anderes Objekt zeigen kann.

Verwandte Themen