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 .

561voto

Ralph Punkte 114913

Wenn Sie die String-Verkettung in einer Schleife verwenden, etwa so,

String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

dann sollten Sie eine StringBuilder (nicht StringBuffer ) anstelle einer String weil es viel schneller ist und weniger Speicherplatz verbraucht.

Wenn Sie eine einzige Erklärung haben,

String s = "1, " + "2, " + "3, " + "4, " ...;

dann können Sie String s, denn der Compiler verwendet StringBuilder automatisch.

54voto

zawhtut Punkte 7967

Die Antwort von Ralph ist fabelhaft. Ich würde eher StringBuilder Klasse verwenden, um den String zu bauen/dekorieren, weil die Verwendung von es ist mehr aussehen wie Builder Muster.

public String decorateTheString(String orgStr){
            StringBuilder builder = new StringBuilder();
            builder.append(orgStr);
            builder.deleteCharAt(orgStr.length()-1);
            builder.insert(0,builder.hashCode());
            return builder.toString();
}

Es kann als Hilfsmittel/Builder verwendet werden, um den String zu erstellen, nicht der String selbst.

45voto

Riaan Cornelius Punkte 1893

Als allgemeine Regel gilt: Verwenden Sie immer den besser lesbaren Code und führen Sie nur dann eine Umstrukturierung durch, wenn die Leistung ein Problem darstellt. In diesem speziellen Fall optimieren die meisten neueren JDKs den Code in jedem Fall auf die StringBuilder-Version.

In der Regel müssen Sie dies nur dann manuell tun, wenn Sie die Zeichenkettenverkettung in einer Schleife oder in einem komplexen Code durchführen, den der Compiler nicht ohne weiteres optimieren kann.

7voto

Michał Niklas Punkte 50723

Werfen Sie einen Blick darauf: http://www.javaspecialists.eu/archive/Issue068.html y http://www.javaspecialists.eu/archive/Issue105.html

Führen Sie die gleichen Tests in Ihrer Umgebung durch und prüfen Sie, ob neuere JDKs oder Ihre Java-Implementierung eine Art von String-Operation besser mit String oder besser mit StringBuilder .

5voto

Evgeniy Dorofeev Punkte 129020

Für zwei Strings ist concat schneller, in anderen Fällen ist StringBuilder eine bessere Wahl, siehe meine Erklärung in Verkettungsoperator (+) vs. concat()

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