Javaで参照により整数を渡す
この投稿では、Javaで参照によって整数を渡す方法について説明します。
Cでは、ポインターを使用して参照によって引数を渡すことができ、C++でも参照を使用して同じことができることがわかっています。
Javaは値渡しであり、Javaでは参照によってプリミティブを渡すことはできません。また、 Integer
クラスはJavaでは不変であり、Javaオブジェクトは値によって渡される参照です。したがって、Integerオブジェクトは、呼び出し元とまったく同じオブジェクトを指しますが、オブジェクトに変更を加えることはできません。これは、呼び出し元の関数に反映されます。
1.カスタムラッパークラスを作成します
ここでの考え方は、整数値を可変オブジェクトでラップすることです。これを行うには、プリミティブをメンバーフィールドとして含む参照クラスを作成するだけです。これを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class IntHolder { public Integer value; IntHolder(Integer value) { this.value = value; } @Override public String toString() { return String.valueOf(value); } } class Main { public static void modify(IntHolder i) { i.value = 10; } public static void main(String[] args) { IntHolder i = new IntHolder(2); modify(i); System.out.println(i); } } |
出力:
10
2.プリミティブ値をアレイにラップする
長さ1のアレイを使用して、プリミティブをラップすることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Main { public static void increment(int[] arr) { arr[0]++; } public static void main(String[] args) { int i = 10; int[] arr = { i }; increment(arr); System.out.println(arr[0]); } } |
出力:
11
3.使用する AtomicInteger
または、プリミティブ整数を次のように置き換えることもできます。 AtomicInteger
オブジェクト、組み込み Java
パッケージに含まれるクラス java.util.concurrent.atomic、単一変数でのロックフリースレッドセーフプログラミングをサポートする他のいくつかのクラスとともに。シングルスレッド環境では、これがパフォーマンスに影響を与える可能性があることに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.concurrent.atomic.AtomicInteger; class Main { public static void set(AtomicInteger i) { i.set(10); } public static void main(String[] args) { AtomicInteger i = new AtomicInteger(5); set(i); System.out.println(i); } } |
出力:
10
4. ApacheCommonsLangの使用
最後に、 MutableInt
ApacheCommonsライブラリのクラス。パッケージで定義されています org.apache.commons.lang3.mutable
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import org.apache.commons.lang3.mutable.MutableInt; class Main { public static void increment(MutableInt i) { i.increment(); } public static void main(String[] args) { MutableInt i = new MutableInt(5); increment(i); System.out.println(i); } } |
出力:
6
これは、Javaで参照によって整数を渡すことについてのすべてです。