私のJavaプログラムがどのようにメモリを割り当てているかについて少し混乱しています。以下は私のプログラムの典型的な状況です。クラス内のヒープ上に作成されたオブジェクトがあり、それを他のクラス内の他の関数に渡します。
public class A {
private List<Integer> list = new ArrayList<Integer>();
public A() {
for(int i = 0; i < 100; i++)
list.add(i);
}
public void foo() {
B b = new B();
b.bar(this.list);
}
}
public class B {
A a = new A();
public int bar(List<Integer> list) {
list.add(-1);
return list.size();
}
public int getSize() {
List<Integer> list = a.list;
return a.size();
}
}
私の質問は、メモリがどのように使用されているかについてです。AのリストがB.bar()に渡されると、メモリはコピーされますか?Javaは値渡しであるため、B.bar()関数には、ヒープにも割り当てられているリストのコピーが含まれていると思いますか?それとも、リストを複製してスタックに配置しますか?それとも、リストがまったく重複していますか?同様に、B.getSize()内のこれらのメモリの質問には何が当てはまりますか?