我将问一个关于Java内存使用的基本问题。
想象一下,我们有一个数组List,它足够大,我们不喜欢使用更多的内存。现在,如果我想通过它们的构造函数或方法将此数组传递给此类中的其他方法或其他类,是否需要额外的内存/此数组是否有额外的内存使用?
如果是,我可以只使这个数组包级别,因此这个包中的其他类可以直接访问它,而不需要任何内存。
提前谢谢。
答案 0 :(得分:2)
不,不需要额外的内存。函数的参数通过引用的副本传递。这意味着对于任何类型的对象,只使用4个额外的字节。
如果您将数组作为参数传递,并且在方法正文中修改,则将在方法之外导出。
相反,如果您重新分配数组变量,则差异在外部不可见。
这是因为参数作为引用的副本传递,而不是通过引用传递。
public void vsibleModification(int[] a) {
for (int i = 0; i < a.length; i++) {
// This change is visible outside of method because I change
// the content of a, not the reference
a[i] = a[i] + 1;
}
}
public void nonVisibleModification(int[] a) {
// Non visible modification because a is reassigned to a new value (reference modification)
a = new int[2];
a[0] = 1;
a[1] = 2;
}