为什么以下代码中存在NullPointerException?

use*_*648 -12 java arrays

下面的代码显示了NullPointerException

public class Q117d { 
    static int[] a;
    public static void main (String[] args) {
        a[-1] = 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的代码显示了ArrayIndexOutOfBound异常

public class Q117c{
    static int[] a;
    public static void main(String[] args) {
        a=new int[5];
        a[0]=2;
        a[2]=3;
        a[-1]=2;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么两个代码都显示不同的异常,因为在[-1]中都应该为空?

Dan*_*son 10

因为在第一个你还没有初始化.首先声明一个变量,它将分配一些内存.但只有当你告诉你a = new int[10]将分配一个确切的内存量,在这种情况下,10个整数......没有告诉这个数组的大小,它们是无处的分配(null)

在第二个你已经初始化,所以有一个数组的内存分配.但是没有声明[-1],因为数组在索引0处开始计数