zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

x = 3; y = 5
Beginn PunktDoppler
x = 3; y = 5
x = 6; y = 10
Ende PunktDoppler
x = 6; y = 10

Immer noch Call-By-Value

Hier sind die Fakten:

  1. Parameter werden immer als Wertkopie (Call-By-Value) übergeben.
  2. Wenn der Parameter einer Methode ein primitiver Datentyp ist, kann die Methode den Wert ihres Parameters ändern. Das hat jedoch keinerlei Auswirkung außerhalb der Methode.
  3. Aber, wenn der Parameter einer Methode eine Referenz auf ein Objekt ist, kann die Methode die Referenz verwenden, um auf das Objekt zuzugreifen und sie kann die Instanzvariablen des Objekts ändern (außer sie sind private oder in einem anderen Paket).
  4. Unveränderbare Objekte können nicht geändert werden.

Diese Fakten sind bei Call-By-Value konsistent. Der "Wert" ist die Referenz auf das Objekt. Die aufgerufene Methode hat ihre eigene Kopie dieses Werts und kann die Kopie der aufrufenden Methode nicht ändern. Aber, sie kann das Objekt ändern.

Natürlich, sogar wenn eine Methode eine Referenz auf ein Objekt hat, kann das Objekt nur geändert werden, wenn das Objekt Änderungen erlaubt (entweder durch öffentliche Instanzvariablen oder durch Zugriffsmethoden).

FRAGE 12:

Betrachten Sie die Definition der MeinPunkt Klasse. Überlegen Sie sich einen Weg, um MeinPunkt-Objekte unveränderbar zu machen.