398 Stimmen

Wann wird der StringBuilder in Java verwendet?

Es wird angenommen, dass es generell vorzuziehen ist, eine StringBuilder für die String-Verkettung in Java. Ist dies immer der Fall?

Was ich meine, ist Folgendes: Ist der Aufwand für die Erstellung eines StringBuilder Objekts und ruft die append() Methode und schließlich toString() bereits kleiner als die Verkettung vorhandener Zeichenketten mit dem + Operator für zwei Zeichenfolgen, oder ist er nur für mehr (als zwei) Zeichenfolgen ratsam?

Wenn es einen solchen Schwellenwert gibt, wovon hängt er ab (vielleicht von der Länge der Zeichenfolge, aber auf welche Weise)?

Und schließlich: Würden Sie die Lesbarkeit und Prägnanz der + Verkettung für die Durchführung der StringBuilder in kleineren Fällen wie zwei, drei oder vier Saiten?

Ausdrückliche Verwendung von StringBuilder für reguläre Verkettungen wird als veraltet bezeichnet unter veraltete Java-Optimierungstipps als auch bei Java urbane Mythen .

5voto

William Morrison Punkte 10773

Einige Compiler ersetzen möglicherweise keine String-Verkettungen durch StringBuilder-Äquivalente. Achten Sie darauf, welche Compiler Ihr Quelltext verwenden wird, bevor Sie sich auf Optimierungen der Kompilierzeit verlassen.

4voto

spa Punkte 4884

Der Operator + verwendet public String concat(String str) innerlich. Diese Methode kopiert die Zeichen der beiden Zeichenketten, so dass der Speicherbedarf und die Laufzeitkomplexität proportional zur Länge der beiden Zeichenketten sind. StringBuilder arbeitet effizienter.

Ich habe jedoch gelesen aquí dass der Verkettungscode, der den +-Operator verwendet, bei Post-Java-4-Compilern in StringBuilder geändert wird. Also könnte dies nicht ein Problem überhaupt sein. (Obwohl ich diese Anweisung wirklich überprüfen würde, wenn ich in meinem Code darauf angewiesen bin!)

3voto

Navi Punkte 8196

Das Problem bei der String-Verkettung ist, dass sie zum Kopieren des String-Objekts mit allen damit verbundenen Kosten führt. Der StringBuilder ist nicht thread-sicher und daher schneller als der StringBuffer, der vor Java 5 die bevorzugte Wahl war. Als Faustregel gilt, dass Sie die String-Verkettung nicht in einer Schleife durchführen sollten, die häufig aufgerufen wird. Ich schätze, dass ein paar Verkettungen hier und da nicht schaden, solange es sich nicht um Hunderte handelt, und das hängt natürlich von Ihren Leistungsanforderungen ab. Wenn Sie in Echtzeit arbeiten, sollten Sie sehr vorsichtig sein.

2voto

Babak Naffas Punkte 11938

Das Microsoft-Zertifizierungsmaterial behandelt dieselbe Frage. In der .NET-Welt macht der Overhead für das StringBuilder-Objekt eine einfache Verkettung von 2 String-Objekten effizienter. Ich würde eine ähnliche Antwort für Java-Strings vermuten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X