奇怪的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?