Java の非常に不可解な機能 (?) に出くわしました。
「new」キーワードを使用してメソッド引数を置き換えると、そのオブジェクトが別のスコープにシフトするようです。
import java.util.ArrayList;
public class Puzzle {
public static void main(String[] args) {
ArrayList<Integer> outer = new ArrayList<Integer>();
outer.add(17);
Puzzle.change(outer);
outer.add(6);
System.out.println(outer);
// excpected output:
// [23]
// [23, 6]
//
// actual output:
// [23]
// [17, 7, 6]
}
public static void change(ArrayList<Integer> inner) {
inner.add(7);
inner = new ArrayList<Integer>();
inner.add(23);
System.out.println(inner);
}
}
この奇妙さを説明できる人はいますか?代入でも同じような振る舞いに気づきました。