上下文:我正在制作类似微型解释器的计算器。我认为保存符号表的最佳方法是制作一个我定义的对象的ArrayList(对象的名称为WiP)。设置ArrayList的样子。
ArrayList<miniVariable> vList = new ArrayList<miniVariable>();
足够简单,并且miniVariable
对象包含以下变量
public String name;
public double value;
public boolean initialized;
它们是公共的,因为我已经使用ArrayList在类中进行了setter / getter,但当我不知道可以创建Objects之一时,我也不想将所有内容移到其他地方。我可能应该。
问题::如果我要打电话给vList.get(index) .value = 5;
,它实际上会更改存储在vList(index)
的{{1}}变量中的值吗?还是value
只是返回数据的副本,因此更改此副本实际上没有任何作用?
答案 0 :(得分:0)
ArrayList
中存储的不是对象本身,而是对象的引用。
因此,当您执行vList.get(i)
时,它会返回您先前放入的引用。这意味着您将访问先前放入列表的相同对象,而不是其副本。 / p>
熟悉Java的基本概念之一,即引用和原始类型。
一些偏离主题的建议:
MiniVariable
而不是miniVariable
。MiniVariable
是一个类,但不是对象。您可能会说“并且一个MiniVariable对象(实例)包含这些成员字段”,或“在MiniVariable类中定义了以下成员字段” 答案 1 :(得分:0)
它会像预期的那样更改原始实例的值。
在Java中创建对象的副本只会显式地发生(通常会遇到一些困难)。
其他一些注意事项:
CapitalCase
。答案 2 :(得分:0)
所有collections对象都存储了对object的引用,如果您直接(通过collection访问)或间接(已经具有对它的引用)更改对象上的任何内容,它将更改存储在collection中的对象的状态