03.01 Strings – Eine Einführung

Zeichenketten werden für alle Ausgaben benötigt, egal ob auf grafischen Oberflächen, in der Konsole oder für Dateien. Deshalb gibt es – wie in jeder Programmiersprache – auch in Java Zeichenketten. Diese sind wie in anderen Sprachen eine Aneinanderreihung von einzelnen char-Elementen. Im Gegensatz zu C/C++, werden Zeichenketten in Java aber nicht durch ein Null-terminiertes char-Array dargestellt, sondern nur durch die Klasse String. Daher muss man nicht auf die interne Struktur der Zeichenkette achten. Da es sich bei einem String um eine Klasse handelt, greift dieses Kapitel den OOP Kapiteln teilweise voraus. Aber keine Sorge, Sie werden dieses Kapitel auch ohne Objekt-Orientierte Kenntnisse nachvollziehen können.

Das Außergewöhnliche an einer Zeichenkette in Java ist, dass sie fast wie ein primitiver Datentyp verwendet werden kann, aber gleichzeitig genau genommen ein Objekt einer Klasse darstellt. Somit verfügt ein String auch über alle damit verbundenen „Annehmlichkeiten“. Was das bedeutet, werden Sie in diesem und den nachfolgenden Kapiteln lernen. Eine erste Konsequenz ist die flexible Möglichkeit einen neuen String zu erstellen:

String str = new String("Hallo, ich bin ein String");
String str2 = "Hallo, ich bin auch ein String";

Zum Einen kann ein String wie eine ganz normale Klasse über das Schlüsselwort new initialisiert werden. Es ist aber ebenso möglich den gewünschten Wert gleich hinter das Gleichheitszeichen – wie bei einem primitiven Datentyp – zu schreiben. Dabei wird der Wert immer in Anführungszeichen gesetzt. Beide Varianten sind äquivalent zueinander.

Das bedeutet natürlich auch, dass diese Codezeile

System.out.println("Ich bin eine Ausgabe");

genau das Selbe erledigt wie diese hier:

System.out.println(new String("Ich bin eine Ausgabe"));

Da ein String eine Instanz einer Klasse ist, stehen auch mehrere Methoden zur Verfügung.

Eine Methode ist ein Code-Block, der durch seinen Namen über eine Klasse oder ein Objekt aufgerufen wird. Dabei wird meistens das Objekt manipuliert oder analysiert und ein entsprechender Wert zurückgeliefert. Manchen Methoden können/müssen auch Werte übergeben werden, um den Aufruf noch genauer zu spezifizieren. Hierzu aber mehr im OOP-Kapitel.

Eine davon ist die Methode length(), welche die Länge des Strings zurückgibt. Sie gehen nun vielleicht davon aus, dass die Methode nur so aufgerufen werden kann:

String str = "Hallo, ich bin ein String";
System.out.println(str.length());

Aufgrund der ungewöhnlichen Eigenschaften eines Strings ist aber auch folgende Variante möglich:

System.out.println("Hallo, ich bin ein String".length());

Sie sehen also, dass alles in doppelten Hochkommata als Objekt der Klasse String behandelt wird.

Zur Vollständigkeit sei noch erwähnt, dass die Klasse String final ist. Das ist zwar für Sie momentan noch uninteressant, behalten Sie diese Information aber für die Kapitel 04.05 Vererbung und 04.07 Weitere Modifizierer im Hinterkopf.

3 Replies to “03.01 Strings – Eine Einführung”

  1. Astropoly

    „Da ein String eine Klasse ist,…“ – ist das denn so? Ich hoffe, ich komme da nicht durcheinander aber „ein“ String ist doch wohl eher eine Instanz der entsprechenden Klasse. So steht das auch ein paar Zeilen höher: „Das Außergewöhnliche an einem String ist, dass er ein Objekt ist…“
    Gruß Frank

  2. Stefan Kiesel

    Hallo Astropoly,

    das ist evtl. ein wenig ungünstig formuliert. Und ehrlich gesagt habe ich auch nicht damit gerechnet, dass sich jemand im Einführungskapitel der Strings über Begrifflichkeiten zwischen Objekte und Klassen einen Kopf macht 😉 .

    Eine wirkliche Zeichenkette, also bspw. "Hallo, ich bin ein String" ist ein Objekt bzw. Instanz der Klasse String. Gleichzeitig ist ein String aber auch eine Klasse, da ansonsten kein Objekt bzw. keine Instanz von ihr erzeugt werden könnte. Man könnte also sagen: Ein String ist eine Klasse, von welcher Objekte bzw. Instanzen erzeugt werden. Daraus resultieren dann String-Instanzen. Das wirkliche Objekt wird dann meistens in einer Variablen abgespeichert und über deren Namen abgerufen: „Die Variable xyz ist vom Typ String und repräsentiert ein Objekt der Klasse String.“.

    Der Unterschied zu primitiven Datentypen liegt darin, dass ein primitiver Datentyp keine Attribute und Methode besitzen kann, sondern einfach nur einen sehr simplen Wert repräsentiert. Bei Objekten und Klassen sieht das Ganze ein wenig anders aus. In der Klasse werden Attribute und Methoden angelegt. Auf diese Methoden und Attribute besteht dann (je nach verwendeten Modifizierern) entweder Zugriff von der Klasse direkt, oder von einem entsprechenden Objekt der Klasse aus.

    Aber diese Ausführungen greifen eigentlich viel zu weit in das Kapitel über Objektorientierte Programmierung vor, weshalb ich das an dieser Stelle eigentlich auch nicht weiter ausführen möchte. Aber ich werde mir etwas überlegen, ob man die entsprechenden Absätze evtl. anders formulieren könnte.

    Sollte noch etwas unklar sein, dürfen Sie gerne noch einmal nachfragen.

    Gruß
    Stefan

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.