ホームページ  >  記事  >  Java  >  値渡しの制限にもかかわらず、Java でプリミティブ値を交換するにはどうすればよいでしょうか?

値渡しの制限にもかかわらず、Java でプリミティブ値を交換するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 07:47:31896ブラウズ

How Can You Swap Primitive Values in Java Despite the Pass-by-Value Limitation?

Java でのプリミティブの交換: 値渡しの制限への対処

Java では、メソッドへのパラメータの受け渡しは値によって行われます。これは、メソッド内でパラメータに加えられた変更が元の変数に反映されないことを意味します。これは、整数などのプリミティブ型の値を交換しようとするときに問題になる可能性があります。

以下のコード スニペットは、この問題を示しています。

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

このメソッドを実行すると、

この制限を克服するための 1 つのアプローチは、Java 代入演算子を利用する「トリック」を使用することです。次のコードは例を示しています。

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

このメソッドは、代入演算 x=y の評価順序に依存します。まず、x がメソッド swap() に渡され、次に y が x に割り当てられ、それらの値が事実上交換されます。戻り値 a は単に a の初期値を返します。これは y と等価になります。

もう 1 つのアプローチは、同じ型の任意の数のオブジェクトを交換できる汎用メソッドを作成することです。

<code class="java">public static <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 までご連絡ください。