对象作为函数的参数
当对象作为函数的参数传递到方法中时,实际上传递的是对象的地址值。
1. 以传递TreeNode对象为例,root传递给change函数的是root的地址值。
public static void change(TreeNode node)
{
}
public static void main(String[] args) {
TreeNode root=new TreeNode(5);
change(root);
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
在内存中参数传递的示意图:
2. 改变引用对象的值,真实值不变。
public static void change(TreeNode node)
{
node=null;
}
public static void main(String[] args) {
TreeNode root=new TreeNode(5);
change(root);
}
输出:
root=com.tree.TreeNode@41629346
node=null
3.创建root时,初始化root.left对象
4.通过引用对象node改变left的值,真实值改变
public static void change(TreeNode node)
{
node.left=null;
}
public static void main(String[] args) {
TreeNode root=new TreeNode(5);
root.left=new TreeNode(4);
change(root);
}
输出:
root.left=null;
node.left=null;