在Java中取消对对象的引用
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中的解引用有关,可能是一个非常常见和重要的问题,所以有人能帮我解决吗
# 1 楼答案
您必须制作
List
的副本,并将副本存储在res
:res.add(new ArrayList<Integer>(tmp));
请记住,虽然列表是副本,但列表中的对象是相同的。因此,如果对一个列表中的对象进行更改,副本中的对象也将更改。除非你把原来的清单复印一份
# 2 楼答案
要保留旧的} 并将其分配给
ArrayList
,请copy the existing ^{tmp
:现在,您可以在不影响旧列表的情况下处理列表的副本
# 3 楼答案
你在找
其想法是创建对象的副本,而不是在多个位置使用相同的引用