Immer noch Call-By-Value


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 einige Fakten:

  • Wenn eine Methode eine andere Methode aufruft, indem sie primitive Daten
    als Parameter verwendet,
    kann die aufgerufene Methode die Daten der ersten Methode nicht ändern.
  • Aber wenn eine Methode eine andere Methode aufruft, indem sie einen
    Objektreferenz-Parameter verwendet, kann der
    Inhalt eines veränderbaren Objekts geändert werden und die
    Änderung wird in der ersten Methode sichtbar sein.
  • 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.