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

2022-08-31 12:04:04

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

如果我将此对象的引用更改为 null,该怎么办?这是否意味着 ArrayList 中的对象现在也为 null?


答案 1

此更改是否会反映在 ArrayList 中?

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


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

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


如果我将此对象的引用更改为 null,该怎么办?这是否意味着 ArrayList 中的对象现在也为 null?

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

示范:

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]

答案 2

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

但是,当您处理不可变的对象(如 Strings)时,将在“更改操作”上创建一个新对象。实际上,您的旧对象仍在列表中,而您在其他地方获得了新对象。


推荐