2010-08-02 18 views

Antwort

13

Es gibt keine "set" Methoden auf String. Strings sind immutable in Java. Um den Wert einer String Variablen zu ändern, müssen Sie der Variablen einen anderen String zuweisen. Sie können die vorhandene Zeichenfolge nicht ändern.

(ohne ein neues String-Objekt erstellen)

zuordnen schafft keine neuen Objekt - es kopiert die Referenz. Beachten Sie, dass selbst wenn Sie schreiben etwas wie folgt aus:

s = "hello"; 

es wird nicht ein neues String-Objekt jedes Mal schaffen es ausgeführt wird. Das String-Objekt wird aus dem String-Pool kommen.

2

Die Zeichenfolgen sind unveränderlich, so dass Sie den Wert einer bereits erstellten Zeichenfolge nicht ändern können.

4

Eigentlich gibt es keine Möglichkeit, das in Java zu tun, die String-Objekte sind standardmäßig unveränderlich.

In der Tat, das ist einer der Gründe, warum die Verwendung der "+" Verkettung Operator wie "str1" + "str2" schrecklich ineffizient ist, denn was es tut, ist jede Zeichenfolge kopieren, um eine dritte zu erzeugen.

Je nach Bedarf sollten Sie prüfen, StringBuilder

0

Verwendung Es hängt ein wenig von Ihrer Definition des Objekts. Wenn Sie die Referenz meinen, nein. Eine Referenz wird immer erstellt. Wenn du den von den Charakteren benutzten Speicher meinst, sicher.

Strings werden (wenn möglich) interniert was bedeutet, dass in einer Zuordnungs:

String s1 = "Hello"; 
String s2 = "Hello"; 

es 2 Referenzen (Zeiger auf eine Speicherstelle) sind, aber Hello ist auf nur 1 Platz im Speicher. Dies ist einer der Gründe, warum Strings nicht geändert werden können.

0

Sicher können Sie das interne Char-Array über Reflexion zugreifen. Aber es ist normalerweise eine schlechte Idee, dies zu tun. Mehr unter http://www.eclipsezone.com/eclipse/forums/t16714.html.

+0

Es ist ** immer ** eine schlechte Idee. Wenn Sie veränderbare Zeichenfolgen benötigen, verwenden Sie stattdessen 'StringBuilder'-Instanzen. –

1

Das String-Objekt ist in Java unveränderlich, so dass alle Änderungen ein neues String-Objekt erstellen. Verwenden Sie einen StringBuilder, wenn Sie Änderungen an einem stringartigen Objekt vornehmen möchten, ohne neue Objekte zu erstellen. Als Bonus können Sie mit dem StringBuilder zusätzlichen Speicher vorbelegen, wenn Sie etwas über die mögliche Länge Ihrer Zeichenfolge wissen.

1

Ich bin über diese Frage gestolpert, weil ich eine Zeichenfolge in einem "umschließenden Typ" festlegen muss - einem anonymen Typ. Aber alle Variablen, die ich innen setzen und verwenden möchte, müssen endgültig sein.

Die einfache Lösung ist verwenden StringBuilder - es ist eine veränderbare String.

Verwandte Themen