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

K''*_*K'' 65 java arraylist

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

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

aio*_*obe 76

这个变化会反映在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]
Run Code Online (Sandbox Code Playgroud)

  • 它将打印"a". (2认同)
  • 请记住,Java总是[按值传递](http://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value)对象的特定引用按值传递,并且应该都清楚. (2认同)

Der*_*ike 5

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

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