引数は値渡し
出力はどれか。
public class Main {
static void change(int x, int[] a) {
x = 10;
a[0] = 10;
a = new int[] {99};
}
public static void main(String[] args) {
int n = 1;
int[] arr = {1};
change(n, arr);
System.out.println(n + " " + arr[0]);
}
}
- A
1 10 - B
10 10 - C
1 99 - D
1 1
正解と解説を見る
正解: A
- A: int はコピーが渡されるので n は 1 のまま。配列は同じものを指すので arr[0] は 10 です。
- B: 引数の x を変えても、呼び出し元の n は変わりません。
- C:
a = new int[]{99}は引数の a を別の配列に向けるだけで、呼び出し元の arr は変わりません。 - D:
a[0] = 10は呼び出し元と同じ配列の要素を書き換えます。
ポイント
- 引数には値のコピーが渡されます。int の x を変えても n は変わりません。
- 配列は「参照の値」のコピーが渡されるので、要素の変更は呼び出し元に反映されます。a を別の配列に向け直しても呼び出し元には影響しません。