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

发布于 2024-12-15 10:59:04 字数 512 浏览 1 评论 0原文

这个问题是在实践测试中出现的:创建一个新的字符串数组,将其初始化为空,然后初始化第一个元素并打印它。为什么会出现空指针异常呢?为什么它不打印“一”?这与字符串不变性有关吗?

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");
        }
    }

谢谢!

This problem came up in a practice test: create a new string array, initialize it to null, then initializing the first element and printing it. Why does this result in a null pointer exception? Why doesn't it print "one"? Is it something to do with string immutability?

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");
        }
    }

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

静待花开 2024-12-22 10:59:05

因为您使 arr 引用了 null,所以它抛出了 NullPointerException

编辑:

让我用数字来解释一下:

在这一行之后:

String arr[] = new String[10];

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

在此处输入图像描述

并在此行之后:

arr = null;

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

在此处输入图像描述

因此,当您调用此行时:

arr[0] = "one";

将抛出 NullPointerException

Because you made arr referring to null, so it threw a NullPointerException.

EDIT:

Let me explain it via figures:

After this line:

String arr[] = new String[10];

10 places will be reserved in the heap for the array arr:

enter image description here

and after this line:

arr = null;

You are removing the reference to the array and make it refer to null:

enter image description here

So when you call this line:

arr[0] = "one";

A NullPointerException will be thrown.

祁梦 2024-12-22 10:59:05

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

With arr = null; you are deleting the reference to the object.
So you can't access it anymore with arr[anynumber] .

日久见人心 2024-12-22 10:59:05

arr is null,然后...如果它确实打印了one,您不会感到惊讶吗?将字符串放入空值中?

arr is null, and then... if it did print one, wouldn't you be surprised? put a string into a null?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文