数组中的空指针异常初始化为null

时间:2015-06-02 19:35:06

标签: java arrays nullpointerexception

这是以下代码。为了某个目的,我必须使数组为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;        
}

4 个答案:

答案 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数组anull -

a[i]=0; 

它产生NullPointerException

答案 3 :(得分:0)

首先,为什么不在声明变量double[] a = null;时将其设为NULL 您获得NullPointer的原因是因为您尝试在NULL a[i]=1;时访问它。这与String name = null; name.toString();一样好。您正在对NULL值执行某些操作,因此获取NullPointer 只需初始化它,然后尝试访问它,你就不会得到NullPointer。这就像你应该首先分配一些内存然后尝试访问内存位置,当没有分配内存时,你会得到NullPointer,告诉你还没有分配内存。希望这会有所帮助。