我正在尝试减少正在处理的Java项目中使用的内存量,而我正在研究的问题之一是使用数组的迭代器,而不是数组的副本。但是,我不确定这是否适用于对象内部的私有数据。例如:
public class MyClass {
private ArrayList<String> data;
public ArrayList<String> getData(){ return this.data; }
public Iterator getDataIter(){ return this.data.iterator(); }
}
public static void main(String[] args) {
MyClass c = MyClass();
ArrayList<String> copyOfData = c.getData();
Iterator dataIter = c.getDataIter();
}
如您所见,在main()中,我不能只去c.data,因为它是私有的。但是,c.getData()将复制整个数组。所以这是我的问题:
答案 0 :(得分:1)
c.getData()
将不复制整个数组,至少不会复制到您粘贴的代码中。
这使其余问题无济于事,但可以肯定的是,dataIter
在这里工作正常。
我建议您回顾一下Java的内存模型如何工作。所有非原始值(所有对象)都以引用形式传递。 this.data
是指向数组的指针。如果返回它,则返回该指针的副本,该副本是一个较小的数字(通常为64位),它指向数组。
您可以对此进行简单的测试:调用.getData(),然后修改数组中的内容。该修改也将发生在MyClass
中,因为只有一个数组,同时包含data
字段以及调用getData()
引用此数组的结果。