有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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中的解引用有关,可能是一个非常常见和重要的问题,所以有人能帮我解决吗


共 (3) 个答案

  1. # 1 楼答案

    您必须制作List的副本,并将副本存储在res

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

    请记住,虽然列表是副本,但列表中的对象是相同的。因此,如果对一个列表中的对象进行更改,副本中的对象也将更改。除非你把原来的清单复印一份

  2. # 2 楼答案

    要保留旧的ArrayList,请copy the existing ^{}并将其分配给tmp

    tmp = new ArrayList<Integer>(tmp);
    

    现在,您可以在不影响旧列表的情况下处理列表的副本

  3. # 3 楼答案

    你在找

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

    其想法是创建对象的副本,而不是在多个位置使用相同的引用