奇怪的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
不再引用(“指向”之类的)最多可容纳十个 String
s 的空间。
【参考方案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字符串数组空指针异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章