Heim >Java >javaLernprogramm >Wie können wir in Java einen Werteaustausch ohne Pass-by-Reference erreichen?
Das Fehlen von Pass-by-Reference in Java: Erzielen von Swaps in Java
Eine der Eigenarten der Java-Programmierung ist das Fehlen von Pass-by-Reference. Parameterübergabe per Referenz. Dies kann beim Versuch, die Werte zweier primitiver Variablen zu vertauschen, hinderlich sein, wie die folgende Funktion zeigt:
<code class="java">void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
Leider erzielt diese Funktion nicht den gewünschten Effekt, da Änderungen an a und vorgenommen werden b innerhalb der Funktion wird nicht an den aufrufenden Code zurückgegeben, da Java-Parameter als Wert übergeben werden.
Eine Lösung: Proxy-Swapping durch Rückgabewerte
Trotz der Mangels Pass-by-Reference ist es immer noch möglich, ein Austauschverhalten in Java zu erreichen. Ein Ansatz besteht darin, Rückgabewerte zu verwenden, um den Proxy-Austausch zu erleichtern. Betrachten Sie den folgenden Code:
<code class="java">int swap(int a, int b) { // usage: y = swap(x, x=y); return a; } y = swap(x, x=y);</code>
In diesem Beispiel gibt swap a zurück und weist es y zu. Gleichzeitig wird x y neu zugewiesen, wodurch durch die Rückgabewertweitergabe effektiv ein Austausch erreicht wird.
Generischer Proxy-Austausch für Objekte
Der Proxy-Austausch-Ansatz kann erweitert werden um mit einer beliebigen Anzahl von Objekten desselben Typs zu arbeiten:
<code class="java"><T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; } c = swap(a, a=b, b=c);</code>
Diese generische Swap-Funktion gibt das erste Argument zurück und weist es der letzten Variablen in der Argumentliste zu, wodurch effektiv mehrere Swaps in einem einzigen Funktionsaufruf durchgeführt werden .
Während diese Techniken Workarounds für das Fehlen von Pass-by-Reference in Java bieten, ist es wichtig, sich ihrer Indirektheit und der möglichen Verwirrung bewusst zu sein, wenn mit Datentypen gearbeitet wird, die keine primitiven Typen sind.
Das obige ist der detaillierte Inhalt vonWie können wir in Java einen Werteaustausch ohne Pass-by-Reference erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!