zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

Nein. Die Anweisung

str = zahl ;

verlangt (offensichtlich), dass der primitive Datenwert, der in zahl enthalten ist, in der Referenzvariable str untergebracht wird. Das geht nicht.

Referenzvariable wiederverwendet

Hier ist eine weitere Modifikation des Beispielprogramms:

class StringBsp3
{
  public static void main ( String[] args )
  {
    String str;

    str   = new String("Der Gingham Hund");
    System.out.println(str);

    str   = new String("Die Calico Katze");
    System.out.println(str);
   }
}

Das Programm macht genau das, was wir erwarten. Es gibt aus:

Der Gingham Hund
Die Calico Katze

Hier ist eine Abbildung, die eine Referenzvariable str und zwei Objekte zeigt. Die Variable verweist zu einem Zeitpunkt nur auf ein Objekt. Zuerst verweist sie den Gingham Hund und dann auf die Calico Katze.

zwei Objekte, aber nur eine Referenzvariable

Hier sind ein paar Details wie die Referenzvariable und die zwei Objekte zusammenhängen:

Anweisung Aktion
str = new String
 ("Der Gingham Hund");
Das ERSTE Stringobjekt erzeugen.
Eine Referenz auf das Objekt in str stellen.
System.out.println
 (str);
Der Referenz in str zu dem ERSTEN Objekt folgen.
Daten holen und ausgeben.
str = new String
 ("Die Calico Katze");
Ein ZWEITES Objekt erzeugen.
Eine Referenz auf das ZWEITE Objekt in str stellen.
Ab dieser Stelle gibt es keine Referenz mehr auf das erste Objekt. Es ist jetzt Ausschuss.
System.out.println
 (str);
Der Referenz in str zu dem ZWEITEN Objekt folgen.
Daten holen und ausgeben.

Beachtet, dass:

  1. Jedes Mal, wenn der new-Operator verwendet wird, wird ein neues Objekt erzeugt.
  2. Jedes Mal, wenn ein Objekt erzeugt wird, wird eine Referenz auf das Objekt erzeugt.
  3. Jedes Objekt, das im Computersystem existiert, hat eine eindeutige Referenz.
  4. Diese Referenz wird üblicherweise in einer Variablen gespeichert.
  5. Später wird die Referenz in der Variablen verwendet, um das Objekt zu finden.
  6. Wenn eine andere Referenz in der Variablen gespeichert wird, ersetzt sie die bisherige Referenz.
  7. Wenn keine Variable eine Referenz auf ein bestimmtes Objekt enthält, gibt es keine Chance es zu finden und es wird Datenausschuss.

Das Wort Ausschuss ist der korrekte Begriff für Objekte, auf die keine Referenzvariable mehr verweist. Da sie nicht gefunden werden können (durch unser Programm), existieren sie in Wirklichkeit nicht mehr. Diese Situation ist üblich und kein Fehler.

Wenn ein Programm ausgeführt wird, werden Objekte erzeugt. Dann, wenn sie nicht länger gebraucht werden, werden die Referenzen auf sie ausrangiert. Aber ein Teil des Java Systems, der Speicherbereinigungsdienst, kümmert sich um die verlorenen Objekte, so dass der Speicher aus dem sie gemacht wurden, erneut verwendet werden kann.


FRAGE 11:

Können verschiedene Objekte der gleichen Klasse in einem Programm zur gleichen Zeit existieren?