如何返回一个空数组而不是null数组?

时间:2016-03-11 18:27:01

标签: arrays class java-7 static-methods

我试图返回一个数组,但得到了空指针异常'。我想它是因为我的方法返回一个元素为null的数组。如何正确返回空数组?

在主要课程main方法中:

public class Test{
public static void main(String[] args){
    int s = 0;
    Project arr[] = new Project[3];
    for(int i = 0; i!=3; i++){

        Project var = Project.getProject(arr, "Programming");
        if (var == null){
            var = new Project();
            var.setName("Programming");
            arr[s]= var;
            s=s+1;
        }
    }
}
}

单独课程中的方法:

static Project getProject(Project[] a, String n) {
    for (int i = 0; i != a.length; i++)
    {
        if(a[i].getName().equals(n))
            return a[i];
    }
    return null;
}

执行:

Exception in thread "main" java.lang.NullPointerException
at Project.getProject(Project.java:12)
at Test.main(Test.java:7)

1 个答案:

答案 0 :(得分:0)

我认为你的困惑是因为不了解数组元素的初始化。这对于数组本身null无效,但它与数组元素null有关。

查看Project arr[] = new Project[3];方法中的main行。当这行被解释时,Java会出现一个长度为3的数组。名为identifier的{​​{1}}现在具有arr值。该标识符(或引用)现在指向存储数组元素的存储器。但那些数组元素本身被初始化为什么价值?

是的,non-null

因此,在这个时间点,null

现在,在第arr[0] = arr[1] = arr[2] = null行,您将此引用Project var = Project.getProject(arr, "Programming");发送到尝试迭代该数组的方法arr。当getProjecti is 0时!在此a[i] = a[0] = null引用中,您的代码最终会调用null,这就是您获得getName()的原因。

您的意图似乎很简单,但不知何故,由于某些复杂的实现,已经创建了这种代码。您应该只是简单地初始化数组实例。在Java中有很多很好的方法可以做到这一点,但是可以从这里开始:

NullPointerException