在练习测试中出现了这个问题:创建一个新的字符串数组,将其初始化为null,然后初始化第一个元素并打印它。为什么这会导致空指针异常?为什么不打印“一个”?它与字符串不变性有关吗?
public static void main(String args[]) {
try {
String arr[] = new String[10];
arr = null;
arr[0] = "one";
System.out.print(arr[0]);
} catch(NullPointerException nex) {
System.out.print("null pointer exception");
} catch(Exception ex) {
System.out.print("exception");
}
}
谢谢!
答案 0 :(得分:14)
由于您arr
引用了null
,因此它引发了NullPointerException
。
修改强>
让我通过数字解释一下:
这一行之后:
String arr[] = new String[10];
数组arr
的堆中将保留10个位置:
在这一行之后:
arr = null;
您要删除对数组的引用,并将其引用到null
:
所以当你拨打这一行时:
arr[0] = "one";
将抛出NullPointerException
。
答案 1 :(得分:1)
使用arr = null;
删除对象的引用。
因此,您无法使用arr[anynumber]
访问它。
答案 2 :(得分:0)
arr is null
,然后......如果打印one
,你会不会感到惊讶?把字符串放入null?