我在使用List<Integer> res = new ArrayList<>(list)
时感到困惑,其中list
是另一个List<Integer>
类型变量。如下:
private void dfs(int[] nums, int startIndex, List<Integer> list, List<Integer> res) {
if (list.size() > res.size()) {
res = new ArrayList<>(list);
}
for (int i = startIndex; i < nums.length; i++) {
if (list.size() == 0 || nums[i] % list.get(0) == 0) {
list.add(0, nums[i]);
dfs(nums, i + 1, list, res);
list.remove(0);
}
}
}
我假设因为我使用了res = new ArrayList<>(list)
初始值设定项而不是res = list
,所以Java会对list
变量进行深层复制,但我错了:当我修改res
时,list
变量仍会发生变化。但是,在大多数情况下,我编写以下代码:
private void dfs(int[] nums, int index, int target, List<List<Integer>> res, List<Integer> list) {
if (target == 0) {
res.add(new ArrayList<>(list));
return;
}
...
}
即使我稍后修改了List<Integer>
变量,res
中的list
元素也不会改变。为什么会这样?