EMZETT.
Login

String Concatenation

Kurz: Mehrere Strings (oder Strings mit anderen Werten) mit + zu einem einzigen String zusammenfügen.

Genauer: Beim Verketten mit + wird ein nicht-String-Wert automatisch über toString() in Text umgewandelt: "Alter: " + 25 ergibt "Alter: 25". Bei sehr vielen Verkettungen (z. B. in einer Schleife) ist StringBuilder effizienter, da String in Java unveränderlich (immutable) ist und + bei jedem Schritt ein komplett neues String-Objekt erzeugt.

Im Detail

String name = "Anna";
int alter = 25;
String satz = "Hallo " + name + ", du bist " + alter + " Jahre alt.";
 
// Ineffizient in einer Schleife - erzeugt bei jedem Durchlauf ein neues String-Objekt:
String ergebnis = "";
for (int i = 0; i < 1000; i++) {
    ergebnis += i + ",";
}
 
// Effizienter: EIN veränderlicher Puffer statt 1000 neuer String-Objekte
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i).append(",");
}
String besser = sb.toString();

Da Strings in Java unveränderlich (immutable) sind, erzeugt jede +-Verkettung ein komplett neues String-Objekt im Speicher — bei einer einzelnen Verkettung wie im ersten Beispiel spielt das keine Rolle, bei tausenden Wiederholungen in einer Schleife kann es aber spürbar Performance und Speicher kosten, weil jedes Zwischenergebnis sofort wieder verworfen wird. StringBuilder (bzw. die thread-sichere Variante StringBuffer) umgeht das, indem er intern ein veränderliches Zeichen-Array verwaltet, an das per .append() angehängt wird, ohne bei jedem Schritt ein neues Objekt zu erzeugen — erst .toString() am Ende erzeugt den finalen, unveränderlichen String.

Der +-Operator selbst wird vom Compiler übrigens bereits automatisch in StringBuilder-Aufrufe übersetzt, wenn die Verkettung in EINEM Ausdruck steht ("a" + "b" + "c") — das Performance-Problem tritt nur auf, wenn die Verkettung über mehrere separate Statements/Schleifendurchläufe verteilt ist, weil dann bei jedem Durchlauf ein komplett neuer StringBuilder erzeugt und sofort wieder verworfen wird.

Siehe auch: Strings, Numbers & Strings