-5
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].value=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 在线程“main”java.lang.NullPointerException 中引发异常。谁能给我解释一下是什么原因?

4

1 回答 1

2

在您的循环中,您将一个值分配给t,它只是来自 的null值的副本objTree。更改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();
于 2013-06-06T13:12:00.280 回答