在Java中取消引用对象

时间:2013-11-04 23:41:26

标签: java object arraylist

ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> tmp = new ArrayList<Integer>();

tmp.add(1);
tmp.add(2);
tmp.add(3);
res.add(tmp);

然后我需要修改tmp:

tmp.remove(tmp.size() - 1);

如何修改res中没有任何更改的tmp?因为如果我以这种方式修改tmp,res中的内容也将被修改。我认为这与Java中的dereference有关,也许是一个非常普遍和重要的问题,有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

单独保留旧ArrayListcopy the existing ArrayList并将其分配给tmp

tmp = new ArrayList<Integer>(tmp);

现在,您可以处理列表的副本,而不会影响旧列表。

答案 1 :(得分:1)

您正在寻找

res.add(new ArrayList<Integer>(tmp));

这个想法是创建一个对象的副本,而不是在多个地方使用相同的引用。

答案 2 :(得分:1)

您必须复制List并将副本存储在res中:

res.add(new ArrayList<Integer>(tmp));

请记住,虽然列表是副本,但列表中的对象是相同的。因此,如果您对一个列表中的对象进行更改,则 copy 中的对象也将更改。除非您对原始列表进行深层复制。