【问题标题】:Java Reference pointer [closed]Java 引用指针 [关闭]
【发布时间】:2013-06-06 13:07:15
【问题描述】:
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 中引发异常。谁能给我解释一下是什么原因?

【问题讨论】:

  • 指针不是Java中的术语!
  • @GrijeshChauhan 这应该是你所拥有的(听说过NullPointerException 吗?);)
  • 致 OP:您得到该异常的原因只有一个:objTree[0]null
  • 当然。在较低的代码中,您永远不会定义 objTree。在上面的代码中,您在循环的第一行定义了 objTree。
  • 该术语实际上在the language specification 中定义:“引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它指没有对象。"

标签: java


【解决方案1】:

在您的循环中,您将一个值分配给t,它只是来自objTreenull 值的副本。更改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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多