Heim  >  Artikel  >  Java  >  Wie können wir in Java einen Werteaustausch ohne Pass-by-Reference erreichen?

Wie können wir in Java einen Werteaustausch ohne Pass-by-Reference erreichen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 18:00:05921Durchsuche

How Can We Achieve Value Swapping in Java Without Pass-by-Reference?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn