【问题标题】:strange java string array null pointer exception [duplicate]奇怪的java字符串数组空指针异常[重复]
【发布时间】: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 的空间。

标签: java arrays string nullpointerexception


【解决方案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"; 抛出的
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多