java引用指针

o7jaxewo  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(302)

这个问题不太可能帮助任何未来的游客;它只与一个小的地理区域、一个特定的时刻或一个非常狭窄的情况有关,而这些情况通常不适用于互联网的全球受众。有关使此问题更广泛适用的帮助,请访问帮助中心。
7年前关门了。

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;
}

对象树[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在线程“main”java.lang.nullpointerexception中引发异常。有人能解释一下原因吗?

iqih9akk

iqih9akk1#

在循环中,为 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();

相关问题