奇怪的java字符串数组空指针异常[重复]

Posted

技术标签:

【中文标题】奇怪的java字符串数组空指针异常[重复]【英文标题】:strange java string array null pointer exception [duplicate] 【发布时间】:2011-12-26 17:59:38 【问题描述】:

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

谢谢!

【问题讨论】:

您将arr 设置为null。当您尝试访问 arr 的元素时,还可能发生什么? 我应该否决这个问题吗? >:) arr 是一个 String[] 变量。如果您将arr 设置为null,那么您将String[] 设置为null——初始的new String[10] 消失了。然后设置arr[0] 尝试使用空数组引用。您可以将arr[0] 设置为null,然后将其设置为"one",但不能设置为arr 数组。 将其视为 null[0] = "one"。 arr 不再引用(“指向”之类的)最多可容纳十个 Strings 的空间。 【参考方案1】:

使用arr = null;,您将删除对该对象的引用。 所以你不能再用arr[anynumber] 访问它了。

【讨论】:

【参考方案2】:

因为你把arr指向null,所以它抛出了NullPointerException

编辑:

让我通过数字来解释一下:

在这一行之后:

String arr[] = new String[10];

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

在这一行之后:

arr = null;

您正在删除对数组的引用并使其引用null

所以当你调用这条线时:

arr[0] = "one";

NullPointerException 将被抛出。

【讨论】:

我知道我将 arr 引用设置为 null,但后来我更改了它。您是说一旦 arr 引用为 null 就永远无法更改? @MichaelMotherway 查看更新。 不,它与是否可变无关,你不能将东西放入null 图片值千字+1 IS 是一张不错的照片——应该受版权保护之类的。谢谢!【参考方案3】:

arr is null,然后……如果它确实打印了one,你不会感到惊讶吗?把一个字符串变成一个空值?

【讨论】:

arr[0] 不为空。我正在打印 arr[0]。为什么你认为 arr[0] 为空? arr 为空,您的异常是从arr[0] = "one"; 抛出的

以上是关于奇怪的java字符串数组空指针异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

空指针异常数组[重复]

java中的空指针异常怎么解决

java hashmap空指针异常

结果集sqlite的Java空指针异常[重复]

Android Sqlite空指针异常---java.lang.NullPointerException [重复]

为什么我得到一个对象数组的空指针异常? [重复]