Java Standard: String
Dieses Kapitel überschneidet sich mit Java Standard: Zeichenketten. Aus praktischen Gründen gehören die Inhalte auf jeden Fall zu den Grundlagen. Es ist zu überlegen, ob das Kapitel "String" als Teil von java.lang
erhalten bleibt und sich schwerpunktmäßig mit den theoretischen Grundlagen befassen soll oder ob es gestrichen werden kann.
Die Klasse String und StringBuffer
[Bearbeiten]Zur Verarbeitung von Texten oder neudeutsch Zeichenketten gibt es in Java die Klasse String. Strings ermöglichen das effiziente Erstellen, Vergleichen und Modifizieren von Texten. Wie man am großen "S" schon sieht, ist String eine Klasse und kein Ordinaltyp wie char (Ordinaltypen beginnen immer mit einem Kleinbuchstaben). Strings werden sehr häufig benutzt, wenn man Werte aus GUI-Oberflächen auslesen bzw. verändern oder Textverarbeitung betreiben möchte. Darum gibt es für Strings einige Vereinfachungen, um den Umgang mit ihnen zu erleichtern:
- zur Benutzung muss man kein String-Objekt erzeugen (man kann es natürlich trotzdem tun)
- man kann Strings einfach mit einer Zuweisung einer Zeichenkette = ".." initialisieren
- Strings können einfach mit Hilfe des +-Zeichens aneinandergehängt werden (Konkatenation)
- Die Klasse String muss nicht explizit importiert werden
- Vorsicht: Um zwei Strings auf Gleichheit bzgl. des Inhalts zu überprüfen, kann man nicht == benutzen. Mit == wird überprüft, ob die beiden Objekte identisch sind, nicht ob deren Inhalt der gleiche ist. Für den Test auf Inhaltsgleichheit benutzt man deshalb die Methode equals() die von der Klasse String bereitgestellt wird.
ein paar Beispiele:
String s1 = "T-Rex"; // verkürzte Initialisierung
String s2 = "Dino";
String s3 = new String( "Dino" ); // s2 ist nun eine Kopie des String "Dino"
if( !s1.equals(s2) ) // wenn beide Strings ungleich sind
s1 = s2 +" "+ s1; // dann mache daraus einen String "Dino T-Rex"
if( s2 != s3) // Vorsicht, dies ergibt wahr!
s1 = s2 +" "+ s3; // hieraus wird nun "Dino Dino"
Unicode-Unterstützung
[Bearbeiten]Die Zeichenketten (Strings) in Java verwenden zur Laufzeit eine UTF-16-Codierung, um die einzelnen Zeichen zu speichern. Das bedeutet, dass normalerweise ein Zeichen 16 Bit belegt. Beim Schreiben und Lesen von Dateien kann eine Konvertierung in verschiedene Zeichensatzcodierungen erfolgen.
Immutable-Objekte
[Bearbeiten]Zeichenketten (Strings) sind unveränderbare Objekte (immutable). Das bedeutet, dass ein Zeichenkettenobjekt, das einmal erzeugt worden ist, nicht verändert werden kann. Methoden, die Zeichenketten verändern, wie z.B. substring(), erzeugen in Wirklichkeit ein neues Zeichenkettenobjekt. Das gilt auch für "+" und "+=".
Man sollte beachten, daß substring() zwar ein neues Zeichenkettenobjekt erzeugt, aber weiterhin dieselbe interne Struktur für die Zeichen der Zeichenkette referenziert. Wenn man also eine sehr lange Zeichenkette hat, die nur temporär verwendet wird, und dann mit substring() davon eine kurze Zeichenkette gewinnt, die man lange aufbewahrt, bleiben intern die Zeichen der langen Zeichenkette weiterhin gespeichert. Normalerweise ist das erwünscht.