奇怪的java字符串数组空指针exception
在实践测试中出现了这个问题:创建一个新的字符串数组,将其初始化为null,然后初始化第一个元素并打印它。 为什么这会导致空指针exception? 为什么不打印“一个”? 它与字符串不变性有关吗?
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"); } }
谢谢!
因为你使arr
引用null
,所以它抛出了NullPointerException
。
编辑:
让我通过数字解释一下:
在这一行之后:
String arr[] = new String[10];
堆中将为数组arr
保留10个位置:
在此之后:
arr = null;
您正在删除对该数组的引用,并使其引用null
:
所以当你拨打这一行时:
arr[0] = "one";
将抛出NullPointerException
。
用arr = null;
您正在删除对象的引用。 所以你不能再使用arr[anynumber]
访问它了。
arr is null
,然后……如果它打印了one
,你会不会感到惊讶? 把一个字符串放入null?