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

时间:2015-07-06 12:33:56

标签: java arrays

以下代码显示 NullPointerException

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

以下代码显示了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;
    }
}

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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

从你的第一个代码( NullPointerException )开始。你没有初始化a,所以当你尝试向NullPointerException添加内容时,会发生异常。

第二个代码( ArrayIndexOutOfBound )。使用size 5初始化a。现在使用0进行数组索引strat,但是你尝试放a[-1],所以ArrayIndexOutOfBound异常将发生。