Indirekte Adressierung Richard Göbel
Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt einen Speicherplatz für den angegebenen Datentyp Bei den folgenden Operationen werden Kopien der gespeicherten Daten erzeugt: Zuweisung (z.B. x = y) Aufruf einer Funktion (z.B. f(x)) Eine Vergleich überprüft die Gleichheit der enthaltenen Daten int x = 17; 17 x:
Indirekte Adressierung - Idee Bei einer Deklaration für indirekte Adressierung wird nur Speicherplatz für eine Adresse (Zeiger, Pointer, Referenz) reserviert. Bei den folgenden Operationen werden Kopien der Adressen und nicht der Daten erzeugt: Zuweisung (z.B. x = y) Aufruf einer Funktion (z.B. f(x)) Eine direkter Vergleich überprüft die Gleichheit der enthaltenen Adressen und nicht der Daten! Student s = new Student(); s: Student name: “Meier“ alter: 19
Referenzen - Beispiel . . . public class C { int v1; int v; } public class T static void RefFunc (C c) c.v = 2; static void ValFunc (int v) v = 2; . . . int v1; C v2 = new C(); v1 = 1; T.ValFunc(v1); System.out.println(v1); v2.v = 1; T.RefFunc(v2); System.out.println(v2.v);
Referenzen - Eigenschaften dieses Konzepts Java stellt sicher, dass jede Referenz nur auf eine Instanz der zugehörigen Klasse verweist: Der Compiler überprüft das Programm auf falsche Zuweisungen und Aufrufe. Cast-Operatoren überprüfen während der Laufzeit den Typ der zugehörigen Objekte. Der benötigte Speicherplatz für alle referenzierten Objekte wird automatisch belegt und wieder freigegeben. Fehler des Programmierers bei der Speicherverwaltung sind damit ausgeschlossen!
Zeichenketten - Basisoperationen Erzeugen von Zeichenketten: String s = “Test“; String t = new String(“Test2“); Vergleich von Zeichenketten: s.equals(t); Zugriff auf Zeichenketten einzelnes Zeichen: s.charAt(2) // ‘s‘ Teilzeichenkette: s.subString(1,3) // “es“ Weitere Operationen Zusammenhängen: s + t // “TestTest2“ Länge der Zeichenkette: s.length() // 4
Zeichenketten - Eigenschaften von Operationen Operationen auf Zeichenketten ändern die Ausgangswerte nicht. Einige Operationen kopieren Teile der Ausgangswerte In einigen Situationen kann die Laufzeit eines Java-Programms durch häufiges Benutzen von Operationen auf Zeichenketten und dem damit verbundenen Kopieraufwand erheblich verlängert werden. while ( . . . ) { c = str.read(); s = s + c; }
Zeichenketten - Datenstruktur StringBuffer Erzeugen eines Stringbuffer Anhängen von Zeichenketten mit der Methode append. Konvertieren des endgültigen Werts mit dem Konstruktur String in ein Objekt vom Typ String. char c; StringBuffer sb; String s; sb=new StringBuffer(1000); while ( . . . ) { . . . c = str.read(); sb = sb.append(c); } s = new String(sb);
Zeichenkette - Methode toString Mit der Methode toString wird eine Zeichenkette für ein Objekt erzeugt. Automatischer Aufruf von toString z.B. durch: println append Operator ‚+‘ Definition von toString für eigene Klassen sinnvoll. public class Person { String name; int alter; . . . public String toString() return “Person: “ + name + “, “ + alter; }