EMZETT.
Login

String

Kurz: Ein Datentyp für Zeichenketten (Text) in der Programmierung.

Genauer: Besteht aus einer Folge von Zeichen (Buchstaben, Zahlen, Symbole), intern meist als Array von Zeichen oder Bytes gespeichert — die konkrete Kodierung der Zeichen regelt z. B. Unicode. In vielen Sprachen sind Strings unveränderlich (“immutable”): jede Änderung erzeugt einen neuen String statt den bestehenden zu verändern.

Im Detail

Unveränderlichkeit (Immutability) ist ein wichtiges, oft überraschendes Detail: schreibt man z. B. in Java text = text + "!", wird NICHT der bestehende String im Speicher verändert, sondern ein komplett neuer String erzeugt und die Variable zeigt danach auf diesen neuen — der alte String bleibt unverändert im Speicher, bis er vom Garbage Collector entfernt wird. Das macht Strings sicher in nebenläufigem Code (mehrere Threads können denselben String lesen, ohne sich gegenseitig zu stören), kostet aber Performance bei sehr vielen Verkettungen in einer Schleife — dafür gibt es speziell veränderliche Alternativen wie StringBuilder in Java.

Typische String-Operationen sind über nahezu alle Sprachen hinweg ähnlich: Länge ermitteln, Teilstrings extrahieren, Suchen/Ersetzen, Groß-/Kleinschreibung ändern, Aufteilen an einem Trennzeichen (split) und Zusammenfügen mehrerer Teile (join/Konkatenation). Wie ein einzelnes Zeichen intern als Zahl kodiert wird, regelt Unicode — moderne Sprachen behandeln Strings standardmäßig als Unicode-Text, was Umlaute, Emojis und nicht-lateinische Schriftsysteme korrekt unterstützt, anders als ältere, auf ASCII beschränkte Systeme.

Zeichenketten-Vergleich: Referenz vs. Inhalt

Ein häufiger Anfängerfehler betrifft den Vergleich von Strings: In vielen Sprachen prüft == bei Objekten (wozu Strings intern zählen) standardmäßig, ob zwei Variablen auf dasselbe Objekt im Speicher zeigen (“Referenzgleichheit”), nicht ob ihr Inhalt gleich ist. Java etwa unterscheidet explizit zwischen == (Referenzvergleich) und .equals() (Inhaltsvergleich) — zwei Strings mit identischem Inhalt, aber unterschiedlicher Erzeugung im Speicher, können bei == als “ungleich” erscheinen, obwohl sie denselben Text enthalten. Andere Sprachen wie Python oder JavaScript lösen das anders (JavaScript vergleicht bei === primitive Strings nach Inhalt, nicht nach Referenz), was beim Sprachwechsel oft zu Verwirrung führt.

Escape-Sequenzen

Um Sonderzeichen innerhalb eines Strings darzustellen, die sonst mit der Syntax kollidieren würden (z. B. ein Anführungszeichen innerhalb eines in Anführungszeichen eingeschlossenen Strings), nutzen praktisch alle Sprachen Escape-Sequenzen mit einem Backslash: \n für einen Zeilenumbruch, \t für einen Tabulator, \" für ein wörtliches Anführungszeichen, \\ für einen wörtlichen Backslash selbst. Diese Konvention ist über fast alle C-beeinflussten Sprachen (Java, JavaScript, Python, C selbst) weitgehend identisch, was den Umstieg zwischen Sprachen in diesem Punkt erleichtert.

Template-/interpolierte Strings

Moderne Sprachen bieten zusätzlich zu klassischer Konkatenation ("Hallo " + name) meist eine kompaktere Interpolationssyntax, um Variablen direkt in einen String einzubetten: Template-Literals in JavaScript (`Hallo ${name}`), f-Strings in Python (f"Hallo {name}"), String-Templates in Kotlin ("Hallo $name"). Diese Syntax ist rein syntaktischer Zucker — intern wird trotzdem eine Verkettung/Formatierung durchgeführt —, verbessert aber die Lesbarkeit deutlich gegenüber langen Ketten aus +-Verkettungen, besonders wenn mehrere Variablen in einen Text eingebettet werden.

Siehe auch: Unicode, Strings