如果我在尝试更改列表内容时执行此操作会发生什么?

时间:2013-02-13 00:44:58

标签: java

我正在努力使列表成为另一个列表的直接副本。这会有用吗?

list1 = list2

它会传输所有内容还是什么都没有?

4 个答案:

答案 0 :(得分:1)

您没有复制,您正在添加参考。进行附加引用和将项插入列表都是 atomic 。如果程序不可拆分,则该过程是原子的。它是完全完成还是没有完成。

另请参阅以下有关如何正确克隆列表的主题。 Java Collections copy list - I don't understand

Google搜索java clone method也会启发你。

答案 1 :(得分:0)

它没有赢。在java中克隆对象并不是那么简单,请参阅链接How do I copy an object in Java?

答案 2 :(得分:0)

没有。它只会使list2引用指向存储在list1引用中的相同列表。您可以使用copy constructor将引用从一个列表复制到另一个列表,但要小心,因为这不是深层复制 - >新列表将包含与原始列表中存储的完全相同的对象。这是示例

List<String> list1 = new ArrayList<>();
list1.add("one");
list1.add("two");

List<String> list2 = list1;//now list2 will point to the same list as list1
list2.add("A");

//lets print content of list1
System.out.println(list1); // -> output: [one, two, A]

//--------------------------------------------------------------

//This way you can create separate list that contains same values as list1
List<String> list3 = new ArrayList(list1);
list3.add("B");

System.out.println(list1); // -> output: [one, two, A]
System.out.println(list3); // -> output: [one, two, A, B]

答案 3 :(得分:0)

在大多数情况下,使用直接分配无用。就好像你有两个不同名称的完全相同的变量,因为它们都指向相同的内存地址。

如果要将列表克隆到另一个列表,则应使用copy constructor

e.g。

ArrayList<E> copyList = new ArrayList<E>(originalList);