Das Fehlen von Pass-by-Reference in Java und seine Auswirkungen auf den Austausch von Primitiven
In Java erfolgt die Übergabe von Parametern an Methoden per Wert, d. h dass alle an den Parametern innerhalb der Methode vorgenommenen Änderungen nicht in den Variablen des Aufrufers widergespiegelt werden. Dies stellt eine Herausforderung dar, wenn versucht wird, die Werte zweier Grundelemente auszutauschen.
Versuch, Grundelemente mit Wertübergabe auszutauschen
Bedenken Sie die folgende Austauschfunktion in Java:
<code class="java">void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
Diese Funktion versucht, die Werte zweier Ganzzahlen zu vertauschen, indem sie eine temporäre Variable erstellt und die Werte manuell jongliert. Nach dem Aufruf dieser Funktion bleiben die ursprünglichen Werte jedoch aufgrund der Wertübergabesemantik von Java unverändert.
Überwindung der Einschränkung
Um diese Einschränkung zu umgehen, kann man sie verwenden Eine Technik, die Javas Ansatz zur Parameterübergabe nutzt. Durch die Verwendung mehrerer Zuweisungen innerhalb der Swap-Funktion ist es möglich, den Austausch effektiv zu erreichen:
<code class="java">int swap(int a, int b) { return a; } // Usage: y = swap(x, x = y);</code>
In dieser modifizierten Version weist die Swap-Funktion a zu b zu und gibt dann a zurück. Der Aufrufer kann dann den Rückgabewert y zuweisen und die tatsächlichen Werte von x und y austauschen:
<code class="java">y = swap(x, x = y);</code>
Generischer Austausch für mehrere Objekte
Diese Technik kann sein verallgemeinert, um den Austausch mehrerer Objekte desselben Typs zu unterstützen:
<code class="java"><T> T swap(T... args) { return args[0]; } // Usage: z = swap(a, a = b, b = c, ... y = z);</code>
Indem man sich auf die sequentielle Ausführung von Zuweisungen und Parameterübergaben verlässt, ist es möglich, Objekte in Java effektiv auszutauschen und so das Fehlen von Objekten zu umgehen „Pass-by-Reference“-Funktionalität.
Das obige ist der detaillierte Inhalt vonKönnen Sie primitive Werte in Java ohne Referenzübergabe austauschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!