我对我的Java程序如何分配内存有点困惑。以下是我的计划中的典型情况。我在类中创建了一个对象,并将其传递给其他类中的其他函数。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()内部吗?
谢谢。我想我只是与传递值相混淆,从不知道这个值实际上是一个参考。 –