为什么我在这个for循环中得到NullPointerException?

时间:2009-06-05 21:02:37

标签: java exception for-loop

这是我的代码:

Comic[] comix = new Comic[3];  
comix[0] = new Comic("The Amazing Spider-man","A-1","Very Fine",9240.00F);  
comix[0].setPrice((Float)quality.get(comix[0].condition));  
for(int i=0;i<comix.length;i++){  
    System.out.println("Title: " + comix[i].title);  
}  

为什么在运行此代码时会出现NullPointerException?

8 个答案:

答案 0 :(得分:12)

您只需设置comix[0]的值,但您在循环中也会获取comix[1]。title和comix[2]。title,因为comix.length是3.引用类型数组中每个元素的默认值为null。长度是整个数组的长度,而不仅仅是“填充”元素。

您可能会发现List<T>(最常用的实现为ArrayList<T>)更易于使用。

答案 1 :(得分:3)

因为您只定义了comix [0]中的内容,而不是comix [1]或comix [2]

答案 2 :(得分:2)

看起来你只是分配三个对象中的第一个,然后显示关于这三个对象的信息?

答案 3 :(得分:2)

因为for循环迭代3次,因为数组大小为3.如果数组中是否填充了3个元素并不重要,那么它的大小为3。

答案 4 :(得分:2)

嗯,你声明了一个适合3个Comic实例的数组,你只有一个。所以在循环的第二次迭代中,comix [1]为null,因此comix [1] .title会抛出NPE。

答案 5 :(得分:1)

comix [1] .title和comix [2] .title为null。你不能打印空字符串。

答案 6 :(得分:1)

你将comix定义为new Comic[3],所以我希望Java能够循环三次。在第二次迭代comix[1],没有标题。

答案 7 :(得分:1)

如果你这样做,你不会得到错误:

Comic[] comix = new Comic[3];      

for(int i=0; i<comix.length; i++){

    comix[i] = new Comic[i];

    comix[i] = new Comic("The Amazing Spider-man","A-1","Very Fine",9240.00F);

    comix[i].setPrice((Float)quality.get(comix[0].condition));   

    System.out.println("Title: " + comix[i].title);   
}