将对象添加到 ArrayList 并在以后修改它

新手上路,请多包涵

如果我有一个 ArrayList,我向它添加了一个对象,后来我修改了这个对象,这个更改会反映在 ArrayList 中吗?或者当我将对象添加到 ArrayList 时,Java 创建一个副本并将其添加到 ArrayList?

如果我将对此对象的引用更改为 null 会怎样?这是否意味着 ArrayList 中的对象现在也为空?

原文由 K‘’ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 366
2 个回答

此更改会反映在 ArrayList 中吗?

是的,因为您在列表中添加了对对象的 _引用_。您添加的引用仍将指向同一个对象(您已修改)。

或者当我将对象添加到 ArrayList 时,Java 创建一个副本并将其添加到 ArrayList?

不,它不会复制对象。 (它将复制对对象的引用。)

如果我将对此对象的引用更改为 null 会怎样?这是否意味着 ArrayList 中的对象现在也为空?

不,因为原始参考的内容在添加到列表时被 复制 了。 (请记住,复制的是 _引用_,而不是对象。)

示范:

 StringBuffer sb = new StringBuffer("foo");

List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);

System.out.println(list);   // prints [foo]
sb.append("bar");

System.out.println(list);   // prints [foobar]

sb = null;

System.out.println(list);   // still prints [foobar]

原文由 aioobe 发布,翻译遵循 CC BY-SA 4.0 许可协议

对对象的任何更改都将反映在列表中。

但是,当您处理像字符串这样不可变的对象时,将在“更改操作”时创建一个新对象。实际上,您的旧对象仍在列表中,而您在其他地方得到了一个新对象。

原文由 DerMike 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题