Das Java 2 JDK 5 Lehrbuch - Sprache und Bibliotheken

Das Java 2 JDK 5 Lehrbuch - Sprache und Bibliotheken

von: Karsten Wolke (Hrsg.), A. Austermann, K. Yermashov et al.

C & L Computer- und Literaturverlag GmbH, 2005

ISBN: 9783936546255 , 845 Seiten

Format: PDF, OL

Kopierschutz: DRM

Windows PC,Mac OSX Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 20,00 EUR

Mehr zum Inhalt

Das Java 2 JDK 5 Lehrbuch - Sprache und Bibliotheken


 

3 Weiterführende Spracheigenschaften (S. 138-139)

3.1 ZEICHENKETTEN
von Karsten Wolke

3.1.1 Die Klasse String

Zeichenketten sind unumstritten wohl eine der meist verwendeten Datenstrukturen in vielen Programmen. Wie in vielen anderen Programmiersprachen auch gibt es in Java für Zeichenketten eine eigene Datenstruktur. Viele Programmiersprachen bieten einen primitiven Datentypen für Zeichenketten an, in Java dagegen werden Zeichenketten hauptsächlich durch die Klasse java.lang.String repräsentiert. Mittlerweile werden die Begriffe String und Zeichenkette von Entwicklern und in der Literatur synonym verwendet. An dieser Stelle soll der Umgang mit der Klasse String erläutert und die Behandlung von Strings in Java verdeutlicht werden. Die String-Klasse hat im wesentlichen dieselbe Bedeutung wie Zeichenketten in anderen Sprachen auch. Einer ihrer Haupteinsatzgebiete ist die Ein- und Ausgabeverarbeitung. Überall dort, wo der Anwender mit dem Programm in Kontakt tritt, werden Zeichenketten verwendet – bei der Ausgabe eines Ergebnisses, eines Fehlers, einer Warnung und auch beim Einlesen von Daten. Eine Zeichenkette ist in Java ein Objekt der Klasse String. Sie bietet mehrere Konstruktoren und eine Reihe von Methoden zum Erzeugen einer Zeichenkette. Die Methoden dienen im wesentlichen zum Zerlegen einer Zeichenkette in eine Teilzeichenkette, zum Vergleichen von Zeichenketten und zum Suchen in einer Zeichenkette.

In Java sind Zeichenketten beziehungsweise Objekte der Klasse String eine Aneinanderreihung von Zeichen. Ein Zeichen wird in Java durch den primitiven Datentypen char dargestellt und repräsentiert ein Unicodezeichen. Informationen zum char- Datentyp, zum Unicode-Standard und zu den Escape-Sequenzen in Zeichenketten sind im Abschnitt 2.1.4 zu finden.

Der Umgang mit Zeichenketten in Java ist nicht viel anders als in anderen Programmiersprachen, die auf dem ASCII.Standard basieren, der abhängig von der Spracheinstellung des Systems nur 256 Zeichen groß ist. Lediglich die ersten 128 Zeichen sind auf jedem System identisch. Da der Unicode- aber mit dem ASCIIStandard weitestgehend kompatibel ist, muß sich der Umsteiger nicht zu viele Gedanken machen.

Weil ein Zeichen in Java grundsätzlich zwei Byte groß ist, sind Zeichenketten in Java doppelt so groß wie in anderen Programmiersprachen, die den ASCII-Zeichensatz verwenden. Diese Eigenschaft hat aber nur bei der externen Ablage von Zeichenketten eine Bedeutung, beispielsweise beim Schreiben einer Textdatei. Bei der internen Behandlung von Strings in Java bemerkt der Entwickler keinen Unterschied zu einer anderen Programmiersprache.

In Java bleibt die innere Struktur einer Zeichenkette verborgen. Ob Java einen String als Character-Array oder auf eine andere Weise behandelt, sieht der Entwickler nicht. Die Analyse beziehungsweise der Zugriff auf die Zeichen eines Strings erfolgt über Methoden der Klasse String.

Besonderheiten von Strings in Java

String-Objekte sind in Java nicht dynamisch. Das heißt, die Zeichenkette, die ein Objekt von String repräsentiert, kann nicht manipuliert beziehungsweise verändert werden. Damit bleiben Länge und Inhalt eines String-Objekts immer gleich. Zudem ist die Klasse String als final deklariert worden. Das heißt, es können keine Unterklassen von der Klasse String erzeugt werden. Diese Eigenschaften bringen Geschwindigkeitsvorteile für die Java-Laufzeitumgebung. Beispielsweise muß der Speicherbereich für eine Zeichenkette nicht dynamisch angepaßt werden, denn ein String-Objekt kann seinen Inhalt und seine Länge nicht verändern. Zudem muß bei der Ausführung von Methoden nicht geprüft werden, ob das Objekt eine Unterklasse von String ist und Methoden dieser Klasse überschrieben hat. Neben den Geschwindigkeitsvorteilen für die Java-Laufzeitumgebung hat dies auch einen Nachteil für den Entwickler: Man kann String nicht um nützliche Methoden erweitern. Wenn man Operationen auf Strings definieren möchte, muß man eine neue Klasse dafür definieren und das String-Objekt als Parameter übergeben. Dies verletzt aber den objektorientierten Gedanken. Operationen und Daten sollten immer zu einer Klasse zusammengefaßt werden.

Veränderbare Zeichenketten werden in Java durch die beiden Klassen StringBuffer und StringBuilder repräsentiert. Möchte man mehrere Operationen auf einer Zeichenkette durchführen, bieten sich diese Klassen eher an als String. Die folgende Anweisung beweist das:

String str = "Hello" + "World",

Zunächst wird für die Literale Hello und World jeweils ein String-Objekt erzeugt. Danach werden die beiden String-Objekte konkateniert. Das Ergebnis dieser Operation ist ein neues String-Objekt, das der Variablen str zugewiesen wird. Da die beiden String-Objekte mit den Zeichenketten Hello und World nicht mehr verwendet werden, kann der Garbage Collector diesen Speicherbereich wieder freigeben. Führt man also Operationen auf Zeichenketten aus, kommt es zu einem nicht zu unterschätzenden Overhead. Die beiden Klassen StringBuffer und StringBuilder wurden extra für veränderbare Zeichenketten entwickelt und werden in einem gesonderten Abschnitt dieses Kapitels behandelt.

Die Klasse String besitzt eine Reihe von Konstruktoren zum Erzeugen von Zeichenketten, und Methoden zur Durchführung von Operationen auf Zeichenketten. Das Ergebnis einer Stringmanipulation ist immer ein neues String-Objekt. Aus diesem Grund verändern die Methoden eines String-Objekts auch nicht das Objekt selbst. Sie führen eine Operation auf die Zeichenkette des Objekts aus und liefern das Ergebnis der Operation als Rückgabewert.

Konstruktoren der Klasse String

Eine Zeichenkette ist in Java ein Objekt. Damit übernimmt die Java-Laufzeitumgebung automatisch das Speichermanagement. Als Entwickler muß man sich nicht wie beispielsweise in der Programmiersprache C oder C++ darum kümmern. Je nach Länge der Zeichenkette wird Speicher bereitgestellt. Wenn die Zeichenkette nicht mehr verwendet wird, wird der Speicherbereich durch den Garbage Collector wieder freigegeben. Zeichenketten können durch eine Reihe von Konstruktoren der Klasse String erzeugt werden: