在刷leetcode:. - 力扣(LeetCode)时查看题解时跟着思路写的代码中
class Solution {
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
dfs(0,nums);
return result;
}
public void dfs(int cur,int[] nums) {
if(cur == nums.length)
{
//在这一行中,官方题解写的是add(new ArrayList<Integer>(t))
result.add(t);
return;
}
t.add(nums[cur]);
dfs(cur+1,nums);
t.remove(t.size()-1);
dfs(cur+1,nums);
}
}
执行结果发现全是[],调试过后发现add()方法传入的是参数的引用而不是参数的值
导致当t改变时result中的所有数组内的值都会改变
因为result中的所有数组本质都是t(地址相同),即add了多个t