这是我的代码:
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?
答案 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);
}