Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


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 Anweisung
   Point 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.

Abbildung 4.4: Umsetzen eines Verweises
Abbildung 4.4


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.