【问题标题】:Null pointer exception in array initialized to null [duplicate]初始化为空的数组中的空指针异常[重复]
【发布时间】:2015-08-16 18:35:27
【问题描述】:

这是以下代码。我必须出于某种目的使数组为空,然后当我将数组组件初始化为 1 时,它会显示空指针异常。如何处理?

public static void main(String[] args) {
    double[] a;
    a=null;
    if(a==null)
        for(int i=0;i<12;i++)
            a[i]=1;        
}

【问题讨论】:

  • 如果anull,则绝对无法访问它,这就是a[i] = 1 引发NullPointerException 的原因。

标签: java arrays nullpointerexception


【解决方案1】:

在尝试使用该变量之前,您需要创建一个数组对象并将其分配给该数组变量。否则,您正在创建 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;
       }
    }

【讨论】:

  • 非常感谢!!问题解决了:D:D
【解决方案2】:

a[i]=1 // 这就是问题所在。

您正在尝试分配一个值,而没有实际分配内存(也就是不初始化)。间接地,您试图调用对 NULL 对象的操作,这显然会导致 Null Pointer Exception

所以

if(a == null){
   a = new double[12]; 
  //other for loop logic  

  }

将解决问题。 12 是数组的大小(它可以保存/存储的双精度值的数量)。

【讨论】:

    【解决方案3】:

    你必须在初始化之前创建数组 -

     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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 2015-04-28
        • 1970-01-01
        相关资源
        最近更新 更多