ホームページ  >  記事  >  Java  >  Java で参照渡しをせずにプリミティブ値を交換できますか?

Java で参照渡しをせずにプリミティブ値を交換できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 08:20:31160ブラウズ

 Can You Swap Primitive Values in Java Without Pass by Reference?

Java の参照渡しの欠如とプリミティブのスワップへの影響

Java では、メソッドへのパラメータの受け渡しは値によって行われます。メソッド内のパラメータに加えられた変更は呼び出し元の変数には反映されません。これにより、2 つのプリミティブの値を交換しようとするときに問題が発生します。

値渡しによるプリミティブの交換を試行

Java で次の swap 関数を考えてみましょう。

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

この関数は、一時変数を作成し、手動で値を調整することによって、2 つの整数の値を交換しようとします。ただし、この関数を呼び出した後、Java の値渡しセマンティクスにより、元の値は変更されません。

制限の克服

この制限を回避するには、次の方法を使用できます。これは、パラメータ受け渡しに対する Java のアプローチを利用する手法です。スワップ関数内で複数の代入を使用することで、スワップを効果的に実現できます。

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

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

この修正バージョンでは、スワップ関数は a を b に代入し、a を返します。その後、呼び出し元は戻り値を y に代入し、x と y の実際の値を交換できます。

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

複数オブジェクトの汎用スワッピング

この手法は次のようになります。同じタイプの複数のオブジェクトの交換をサポートするために一般化されています:

<code class="java"><T> T swap(T... args) {
    return args[0];
}

// Usage: z = swap(a, a = b, b = c, ... y = z);</code>

代入とパラメータの受け渡しの順次実行に依存することで、Java で効果的にオブジェクトを交換することができ、 「参照渡し」機能。

以上がJava で参照渡しをせずにプリミティブ値を交換できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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