奇怪的java字符串数组空指针异常

时间:2011-11-11 04:45:41

标签: java arrays string nullpointerexception

在练习测试中出现了这个问题:创建一个新的字符串数组,将其初始化为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");
        }
    }

谢谢!

3 个答案:

答案 0 :(得分:14)

由于您arr引用了null,因此它引发了NullPointerException


修改

让我通过数字解释一下:

这一行之后:

String arr[] = new String[10];

数组arr的堆中将保留10个位置:

enter image description here

在这一行之后:

arr = null;

您要删除对数组的引用,并将其引用到null

enter image description here

所以当你拨打这一行时:

arr[0] = "one";

将抛出NullPointerException

答案 1 :(得分:1)

使用arr = null;删除对象的引用。 因此,您无法使用arr[anynumber]访问它。

答案 2 :(得分:0)

arr is null,然后......如果打印one,你会不会感到惊讶?把字符串放入null?