4.11.1 | Verweise, Verweistypen und Exemplare |
In Java gibt es keine Zeiger im Sinne von C oder C++. Es gibt nur Verweise auf Objekte. Mit der AnweisungPoint p;wird die Variable p vereinbart, die auf Objekte der Klasse Point oder einer ihrer Unterklassen verweisen kann. Durch diese Deklaration alleine wird noch kein Exemplar von Point erzeugt. Es ist lediglich möglich, mit p auf ein bestimmtes Exemplar zu verweisen. Man sagt auch, p hat einen Verweistyp.
Im folgenden Beispiel, das in Abbildung 4.4 noch einmal illustriert ist, werden zunächst zwei Variablen definiert, denen dann jeweils ein neues Exemplar zugewiesen wird:Point p1; Point p2 = null; ... p1 = new Point(1, 1); boolean b = (p2 == null); // ergibt true p2 = new Point(2, 2); b = (p2 == null); // ergibt false p2 = p1; // Der zweite Punkt ist verloren.Die new-Anweisungen erzeugen neue Exemplare und liefern Verweise auf die neuen Exemplare zurück. Diese Verweise werden dann an p1 und p2 zugewiesen. Was aber enthalten diese Verweise, solange ihnen noch nichts zugewiesen wurde? Alle Datenelemente werden in Java implizit initialisiert. Für Verweistypen existiert der spezielle Initialwert null, der anzeigt, dass auf kein Objekt verwiesen wird. Im Gegensatz zu C ist null in Java ein Schlüsselwort.
Somit haben p1 und p2 im Zeitraum zwischen ihrer Vereinbarung und der ersten Zuweisung den Wert null, was im Beispiel anhand der Variable b gezeigt wird. Welcher konkrete Wert sich nach der Zuweisung ergibt, ist unbestimmt. Bei Verweistypen kann man nur zwischen »ist gleich null« und »ist ungleich null« unterscheiden.
Durch die letzte Anweisung des Beispiels verweist p2 nunmehr auf dasselbe Exemplar wie p1. Das Exemplar, auf das p2 vorher verwies, geht verloren. Es wird nach einer gewissen Zeit vom Garbage Collector entfernt, sofern es keinen anderen Verweis mehr auf das Exemplar gibt.
Noch einmal: Es ist nicht etwa so, dass durch p2 = p1 die Inhalte der Datenelemente kopiert werden und danach weiterhin zwei getrennte Exemplare existieren. Es wird lediglich ein Verweis umgesetzt.