这是以下代码。为了某个目的,我必须使数组为null,然后当我将数组组件初始化为1时,它显示空指针异常。如何处理?
public static void main(String[] args) {
double[] a;
a=null;
if(a==null)
for(int i=0;i<12;i++)
a[i]=1;
}
答案 0 :(得分:4)
在尝试使用变量之前,您需要创建一个数组对象并将其分配给数组变量。否则,您正在创建NullPointerException / NPE的定义:尝试使用(取消引用)引用null的引用变量。
// constant to avoid "magic" numbers
private static final int MAX_A = 12;
// elsewhere in code
if (a == null) {
a = new double[MAX_A]; // you need this!
for (int i = 0; i < a.length; i++) {
a[i] = 1.0;
}
}
答案 1 :(得分:0)
a[i]=1
//这就是问题。
您正在尝试分配值,而不实际分配内存(也就是说,不初始化)。间接地,您尝试在NULL对象上调用操作,这显然会导致Null Pointer Exception
。
所以
if(a == null){
a = new double[12];
//other for loop logic
}
将解决问题。 12是数组的大小(它可以容纳/存储的double值的数量)。
答案 2 :(得分:0)
您必须在初始化之前创建数组 -
double[] a;
a=null;
if(a==null){
a = new double[12];
for (int i = 0; i < a.length; i++) {
a[i] = 1.0;
}
}
当您尝试访问此类数组元素时,double
数组a
为null
-
a[i]=0;
它产生NullPointerException
。
答案 3 :(得分:0)
首先,为什么不在声明变量double[] a = null;
时将其设为NULL
您获得NullPointer的原因是因为您尝试在NULL a[i]=1;
时访问它。这与String name = null; name.toString();
一样好。您正在对NULL值执行某些操作,因此获取NullPointer
只需初始化它,然后尝试访问它,你就不会得到NullPointer。这就像你应该首先分配一些内存然后尝试访问内存位置,当没有分配内存时,你会得到NullPointer,告诉你还没有分配内存。希望这会有所帮助。