EMZETT.
Login

String Concatenation (String-Verkettung)

Kurz: Das Aneinanderhängen mehrerer Zeichenketten (Strings) zu einer einzigen — z. B. um einen Namen und eine Begrüßung zu einer vollständigen Ausgabezeile zusammenzusetzen.

Genauer: In vielen Sprachen lässt sich der +-Operator sowohl für Zahlen (Addition) als auch für Strings (Verkettung) nutzen, was gelegentlich zu überraschenden Ergebnissen führt, wenn Zahl und String im selben Ausdruck gemischt werden. Bei sehr vielen Verkettungen in einer Schleife ist wiederholtes + oft ineffizient, weil bei unveränderlichen Strings jedes Mal eine komplett neue Zeichenkette erzeugt wird — dafür gibt es meist einen dedizierten, effizienteren StringBuilder-artigen Mechanismus.

Im Detail

"Hallo, " + "Welt"          // "Hallo, Welt"
"Ergebnis: " + 42            // "Ergebnis: 42" - Zahl wird automatisch zu String
5 + "5"                      // "55" statt 10 - typische Fehlerquelle!
5 + 5 + "5"                  // "105" - links-nach-rechts: erst 5+5=10, dann +"5"
"5" + 5 + 5                  // "555" - jetzt wird ab dem ersten "+" alles String

Diese automatische Typumwandlung (“Type Coercion”) ist eine häufige Fehlerquelle gerade in dynamisch typisierten Sprachen wie JavaScript — ob + als Addition oder Verkettung interpretiert wird, hängt vom TYP der Operanden ab, und bei gemischten Ausdrücken zählt oft die Reihenfolge von links nach rechts. Statisch typisierte Sprachen (z. B. Java) verhalten sich hier konsistenter, aber auch dort wandelt + mit einem String-Operanden automatisch die andere Seite in einen String um.

Der Effizienz-Fallstrick zeigt sich vor allem in Schleifen:

# Ineffizient bei vielen Durchläufen: jedes += erzeugt einen KOMPLETT NEUEN String
ergebnis = ""
for wort in liste:
    ergebnis = ergebnis + wort + " "
 
# Effizienter: sammelt Teile und verkettet erst am Ende einmal
teile = []
for wort in liste:
    teile.append(wort)
ergebnis = " ".join(teile)

Weil Strings in den meisten modernen Sprachen unveränderlich sind, erzeugt jede scheinbare Verkettung intern eine komplett neue Zeichenkette im Speicher, statt die bestehende zu erweitern — bei N Verkettungen in einer Schleife kann das zu quadratischem statt linearem Aufwand führen. Für genau diesen Fall bieten die meisten Sprachen einen speziellen, veränderlichen “Baustein”-Typ (z. B. StringBuilder in Java, Listen mit anschließendem join() in Python), der Zwischenergebnisse effizient sammelt, ohne bei jedem Schritt neu zu kopieren.

Siehe auch: Strings, Numbers & Strings