ホームページ  >  記事  >  Java  >  Java で参照渡しを使用せずに値の交換を実現するにはどうすればよいでしょうか?

Java で参照渡しを使用せずに値の交換を実現するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 18:00:05921ブラウズ

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

Java には参照渡しがない: Java でのスワップの実現

Java プログラミングの特徴の 1 つは、パスが存在しないことです。参照によるパラメータの受け渡し。これは、次の関数で示されるように、2 つのプリミティブ変数の値を交換しようとするときに障害となる可能性があります。

<code class="java">void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}</code>

残念ながら、この関数は、 a と に変更が加えられたため、望ましい効果を達成できません。 Java パラメータは値によって渡されるため、関数内の b は呼び出し元のコードに伝播されません。

解決策: 戻り値によるプロキシ スワッピング

参照渡しがない場合でも、Java でスワップ動作を実現することは可能です。 1 つのアプローチは、戻り値を使用してプロキシ スワップを容易にすることです。次のコードを考えてみましょう:

<code class="java">int swap(int a, int b) { // usage: y = swap(x, x=y);
    return a;
}

y = swap(x, x=y);</code>

この例では、swap は a を返し、それを y に割り当てます。同時に、x が y に再割り当てされ、戻り値の伝播を通じて効果的にスワップが実現されます。

オブジェクトの汎用プロキシ スワッピング

プロキシ スワップ アプローチは拡張できます。同じタイプの任意の数のオブジェクトを操作するには:

<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>

この汎用スワップ関数は最初の引数を返し、それを引数リストの最後の変数に割り当て、単一の関数呼び出しで複数のスワップを効果的に実行します。 .

これらの手法は Java における参照渡しの欠如に対する回避策を提供しますが、プリミティブ型ではないデータ型を扱うときは間接的であり、混乱が生じる可能性があることに注意することが重要です。

以上がJava で参照渡しを使用せずに値の交換を実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。