以下代码显示 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]中都应该为空?
答案 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异常将发生。