当我们调用ArrayList.add()
方法时,它是创建一个新对象并将其添加到列表中还是将引用的对象添加到列表中?
例如:假设我们有两个ArrayList
,如下所示:
ArrayList<ClassA> a1
和ArrayList<ClassA> a2
。如果我运行代码:
a2.add(a1.get(i))
会创建一个新对象,然后将其添加到a2
,还是会引用两个不同列表中的同一个对象?
它不是
的副本Java是通过值传递还是通过引用问题传递?
因为我想知道ArrayList.add()
方法的内部工作,它是否创建了传递参数的对象副本?
答案 0 :(得分:3)
它将引用两个不同列表中的同一个对象。
当然,您可以通过一些调试工作来验证这一点。
答案 1 :(得分:2)
您只能将引用或基元传递给方法。这种方法也不例外。
ArrayList<String> list = new ArrayList<>();
String s = "Hello";
list.add(s); // pass the reference.
a2.add(a1.get(i))会创建一个新对象,然后将其添加到a2,还是会引用两个不同列表中的同一个对象?
这意味着两个列表都有相同引用的副本(将指向同一个对象)
答案 2 :(得分:2)
它将引用这两个不同列表中的同一个对象,这意味着如果您从一个地方编辑该对象,另一个也会受到影响。
如果您不想要,请考虑制作该课程immutable