我试图返回一个数组,但得到了空指针异常'。我想它是因为我的方法返回一个元素为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)
答案 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
。当getProject
,i is 0
时!在此a[i] = a[0] = null
引用中,您的代码最终会调用null
,这就是您获得getName()
的原因。
您的意图似乎很简单,但不知何故,由于某些复杂的实现,已经创建了这种代码。您应该只是简单地初始化数组实例。在Java中有很多很好的方法可以做到这一点,但是可以从这里开始:
NullPointerException