为了账号安全,请及时绑定邮箱和手机立即绑定

ArrayList.get 如何返回它的对象?

ArrayList.get 如何返回它的对象?

潇潇雨雨 2021-09-15 14:19:32
上下文:我正在制作一个小型解释器式计算器。我认为保存符号表的最佳方法是创建一个我定义的对象的 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 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-09-15
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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

因此,当您这样做时,vList.get(i)它会返回您之前放入的引用。这意味着您将访问之前放入列表中的同一个对象,而不是它的副本。

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

一些题外话的建议:

  • 确保您了解 Java 的命名约定。例如,对于类名,它应该是MiniVariable而不是miniVariable

  • 更准确地说:“并且 miniVariable 对象包含以下变量”MiniVariable是一个类,而不是一个对象。您可能会说“并且一个 MiniVariable 对象(实例)包含这些成员字段”,或者“在 MiniVariable 类中定义了以下成员字段”


查看完整回答
反对 回复 2021-09-15
?
12345678_0001

TA贡献1802条经验 获得超5个赞

正如人们所期望的那样,它会更改原始实例上的值。

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

其他一些注意事项:

  • 中的类名应该是CapitalCase.

  • 在持有对象列表的对象上实现 getter 和 setter 是不好的做法,因为它违反了封装。如果您正在实现 getter 和 setter,最好将它们放在它们适用的类中。


查看完整回答
反对 回复 2021-09-15
  • 3 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信