上下文:我正在制作一个小型解释器式计算器。我认为保存符号表的最佳方法是创建一个我定义的对象的 ArrayList(对象的名称是 WiP)。设置 ArrayList 看起来像。ArrayList<miniVariable> vList = new ArrayList<miniVariable>();足够简单,miniVariable对象包含以下变量 public String name; public double value; public boolean initialized;它们是公开的,因为我已经使用 ArrayList 在类中创建了 setter/getter,当时我没有意识到你可以创建一个对象,而且我不想把所有东西都移过去。我大概应该。问题:如果我调用vList.get(index) .value = 5;它实际上会改变存储在vList(index)'svalue变量中的值吗?或者.get(index)只是返回数据的副本,因此更改此副本实际上并没有做任何事情?
3 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
您存储在 中的ArrayList
不是对象本身,而是对对象的引用。
因此,当您这样做时,vList.get(i)
它会返回您之前放入的引用。这意味着您将访问之前放入列表中的同一个对象,而不是它的副本。
让自己熟悉 Java 的基本概念之一,即引用和原始类型。
一些题外话的建议:
确保您了解 Java 的命名约定。例如,对于类名,它应该是
MiniVariable
而不是miniVariable
。更准确地说:“并且 miniVariable 对象包含以下变量”,
MiniVariable
是一个类,而不是一个对象。您可能会说“并且一个 MiniVariable 对象(实例)包含这些成员字段”,或者“在 MiniVariable 类中定义了以下成员字段”
12345678_0001
TA贡献1802条经验 获得超5个赞
正如人们所期望的那样,它会更改原始实例上的值。
在 Java 中创建对象的副本只会显式地发生(并且通常会遇到一些困难)。
其他一些注意事项:
中的类名应该是
CapitalCase
.在持有对象列表的对象上实现 getter 和 setter 是不好的做法,因为它违反了封装。如果您正在实现 getter 和 setter,最好将它们放在它们适用的类中。
添加回答
举报
0/150
提交
取消