Java Reference指针

时间:2013-06-06 13:07:16

标签: java

public static void main(String[] args)
{
    class Tree{
        int value;
        Tree[] branches;
    }

    int a[]=new int[]{0,1,2};

    Tree[] objTree=new Tree[a.length+1];        
    for(int j=0;j<objTree.length;j++)
    {
        objTree[j]=new Tree();

        objTree[j].branches=new Tree[5];
        for(int i=0;i<objTree[j].branches.length;i++){
            objTree[j].branches[0]=new Tree();
        }
    }
    objTree[0].value=4;
}

objTree [0]。价值= 4;当我使用这个代码时工作正常。但是当我使用下面的代码时,它会引发异常

for(Tree t:objTree)
{
    t=new Tree();
    t.value=5;
    t.branches=new Tree[5];
    for(int i=0;i<t.branches.length;i++){
        t.branches[0]=new Tree();
    }
}
objTree[0].value=4;

objTree [0] .value = 4在线程&#34; main&#34;中抛出异常。显示java.lang.NullPointerException。任何人都可以向我解释是什么原因?

1 个答案:

答案 0 :(得分:2)

在循环中,您为t分配一个值,该值只是nullobjTree值的副本。更改t不会更改objTree中数组元素的值 - 一旦将值复制到t,它们就是两个独立的无关值。您需要使用传统的for循环,例如

for(int j=0; j<objTree.length; ++j) {
        Tree t=new Tree();
        t.value=5;
        t.branches=new Tree[5];
        ...
        objTree[j] = t;
}

另一个答案,现已删除,指出在你的另一个for循环 - 内部循环 - 行

t.branches[0]=new Tree();

应该是

t.branches[i]=new Tree();