Java函数结束时的内存回收坑
做树的题目时发现的。
函数里面创建的实例,如果只是对参数赋值,是会被回收的。
函数
1 public static void crete(TreeNode node){ 2 node = new TreeNode(111); 3 }
调用
1 TreeNode node = null; 2 TreeUtil.crete(node); 3 System.out.println(node.val);
异常
1 Exception in thread "main" java.lang.NullPointerException 2 at LeetCode101.main(LeetCode101.java:28)
按道理来说,我们在函数里面给这个参数创建了实例了。
但是,这个实例,会在函数结束的时候被回收掉,所以还是原来的null。
那要怎么办?要怎样才能获取函数里面操作后的结果?
把创建的实例作为返回值!
函数
1 public static TreeNode create(int x){ 2 TreeNode node = new TreeNode(x); 3 node.left = new TreeNode(x+1); 4 node.right = new TreeNode(x+2); 5 return node; 6 }
调用
1 TreeNode node = TreeUtil.create(1); 2 System.out.println(node.val); 3 System.out.println(node.left.val); 4 System.out.println(node.right.val);
输出
1 2 3
不仅node的内存还在,他的左右孩子都还在