我试图了解二叉树,NullPointerException
即将到来。所以我决定写一个小程序试图理解它。这是代码:
public class Nulls
{
static Node node;
private class Node
{
int val;
Node right;
Node left;
}
public void init(Node n)
{
if(n==null)n=new Node();
}
public void print()
{
System.out.println(node);
}
public static void main(String[] args)
{
Nulls n=new Nulls();
n.init(node);
n.print();
}
}
输出为null
。如果我理解正确,则初始化节点对象,输出应该是对象的toString()
方法。由于print()
方法在init(Node n)
之后执行,因此输出不应为null
。有什么问题?
答案 0 :(得分:6)
根本原因在于Java参数是通过值传递的,这意味着,当您将(引用)节点n
作为参数传递时,您实际上是将该引用的副本传递给该节点,那时是null
。由于您正在更改复制引用,因此在init
执行完成后,您在init
中创建的新节点无法真正分配任何内容。
但这很容易解决:
public class Nulls {
static Node node;
private class Node {
int val;
Node right;
Node left;
}
public void init() {
if(node==null) {
node=new Node();
}
}
public void print() {
System.out.println(node);
}
public static void main(String[] args) {
Nulls n=new Nulls();
n.init();
n.print();
}
}