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。任何人都可以向我解释是什么原因?
答案 0 :(得分: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();