关于临时变量

剑指Offer23题:

package Offer;

import java.util.ArrayList;

public class Offer23_FindPath {
    ArrayList list = new ArrayList<>();
    ArrayList> result = new ArrayList<>();
    public static void main(String[] args){
        TreeNode t1 = new TreeNode(10);
        TreeNode t2 = new TreeNode(5);
        TreeNode t3 = new TreeNode(12);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(7);
        t1.addLeft(t1,t2);
        t1.addRight(t1,t3);
        t2.addLeft(t2,t4);
        t2.addRight(t2,t5);

        Offer23_FindPath o1 = new Offer23_FindPath();
        o1.FindPath(t1,22);
    }
    public ArrayList> FindPath(TreeNode root, int target) {
        if (root==null){
            return result;
        }
        list.add(root.val);
        target-=root.val;
        if (target==0 && root.right==null && root.left==null){
            result.add(new ArrayList(list));
          //  result.add(list);
        }
        FindPath(root.left,target);
        FindPath(root.right,target);
        list.remove(list.size()-1);
        return result;

    }
    
}

对于以下这两句代码:

result.add(new ArrayList(list));
result.add(list);

第一种写法,在堆中新建了一个新的ArrayList,原来的list中的值改变后,result中的值不变。
第二种写法,原来的list中的值改变后,result中的值也会改变。

你可能感兴趣的:(关于临时变量)