ArrayList.get如何返回其对象?

时间:2018-09-12 01:28:32

标签: java

上下文:我正在制作类似微型解释器的计算器。我认为保存符号表的最佳方法是制作一个我定义的对象的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只是返回数据的副本,因此更改此副本实际上没有任何作用?

3 个答案:

答案 0 :(得分:0)

ArrayList中存储的不是对象本身,而是对象的引用

因此,当您执行vList.get(i)时,它会返回您先前放入的引用。这意味着您将访问先前放入列表的相同对象,而不是其副本。 / p>

熟悉Java的基本概念之一,即引用和原始类型。

一些偏离主题的建议:

  • 确保您了解Java的命名约定。例如,对于类名,它应该是MiniVariable而不是miniVariable
  • 更准确地说:”,并且miniVariable Object包含以下变量” MiniVariable是一个类,但不是对象。您可能会说“并且一个MiniVariable对象(实例)包含这些成员字段”,或“在MiniVariable类中定义了以下成员字段”

答案 1 :(得分:0)

它会像预期的那样更改原始实例的值。

在Java中创建对象的副本只会显式地发生(通常会遇到一些困难)。

其他一些注意事项:

  • 其中的类名称应为CapitalCase
  • 在持有对象列表的对象上实现吸气剂和塞特方法是不正确的做法,因为它违反了encapsulation。如果您要实现getter和setter,则最好将它们放在它们适用的类上。

答案 2 :(得分:0)

所有collections对象都存储了对object的引用,如果您直接(通过collection访问)或间接(已经具有对它的引用)更改对象上的任何内容,它将更改存储在collection中的对象的状态