我对我的 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() 中的这些内存问题?