在另一个方法中初始化对象时出现NullPointerException

时间:2015-02-14 03:43:25

标签: java nullpointerexception binary-tree

我试图了解二叉树,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。有什么问题?

1 个答案:

答案 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();
    }
}