"Grundkurs Programmieren in Java - (7. Auflage, 2014)"
2001-2014, Carl Hanser Verlag

Lösungsvorschlag zu Aufgabe 6.9 (Version 3.0)

(c) 2001-2014 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger

Beide Methoden sind prinzipiell, was den Mechanismus des Tauschens an sich angeht, korrekt formuliert, tauscheA arbeitet aber nur lokal.

Die Argumentübergabe beim Methodenaufruf funktioniert nämlich grundsätzlich als Wertaufruf (call by value), d. h. die Werte der aktuellen Parameter werden in die formalen Parameter kopiert, und im Rumpf der Methode wird mit den Kopien gearbeitet. Für die Referenztypen ist dieser Wert allerdings eine Referenz, also ein Zeiger auf ein Objekt.

In tauscheA werden also nur die lokalen Kopien x und y der aktuellen Argumente (feld[1] und feld[2]) vertauscht. Mit den eigentlichen aktuellen Argumenten passiert hingegen nichts.

In tauscheB hingegen wird zwar auch mit Kopien der aktuellen Parameter gearbeitet, eine Kopie a der Referenz feld zeigt jedoch auf das gleiche Objekt (die gleiche Adresse, den gleichen Speicherplatz) wie die Referenz feld selbst. Deshalb werden hier tatsächlich die Komponenten 1 und 2 von feld vertauscht.

Die Ausgabe des gesammten Programms ist somit:

E:\hiwi\temp>java Tausche
100 200 300 400
tauscheA
100 200 300 400
tauscheB
100 300 200 400