Java 为什么这段代码没有抛出nullPointerException?
下面是代码片段 我知道字符串的默认值是Java 为什么这段代码没有抛出nullPointerException?,java,nullpointerexception,Java,Nullpointerexception,下面是代码片段 我知道字符串的默认值是null,它被分配给str。我不明白的是为什么在第一种情况下打印null,而在其他情况下不打印(如第二个代码段) 任何解释都将不胜感激。在第二个示例中,您要做的是访问不存在数组的第一个值: String a[][] = { {}, null }; 所以[1]是空值,没有[0]是空值。在您的示例中,您试图访问空值 请看下面的代码 String a[][] = { {}, null }; System.out.println(a[1]); 它会打印出来
null
,它被分配给str
。我不明白的是为什么在第一种情况下打印null
,而在其他情况下不打印(如第二个代码段)
任何解释都将不胜感激。在第二个示例中,您要做的是访问不存在数组的第一个值:
String a[][] = { {}, null };
所以[1]是空值,没有[0]是空值。在您的示例中,您试图访问空值 请看下面的代码
String a[][] = { {}, null };
System.out.println(a[1]);
它会打印出来
null
当您试图访问null上的第0个元素时,它会抛出null指针预期值,因为您试图访问null上的元素
String a[][] = { {}, null };
System.out.println(a[1][0]);
它将输出
Exception in thread "main" java.lang.NullPointerException
在案例1中,您只是在打印字符串,并且没有赋值,所以默认情况下打印空值。您不会对该字符串执行任何操作来抛出NullPointerException。因此它不会抛出任何异常 在案例2中,您将null值分配给字符串数组,并尝试使用索引获取null对象。因此您得到了nullPointerException 如果您用下面的代码更改case2,您也会在那里得到null
public class Case2{
public static void main(String[] args){
String a[][] = new String[2][2];
a[1][0] = null;
System.out.println(a[1][0]);
}
}
\代码在
a[1]
处打印不带引号的“null”,需要一个数组,并且由于该数组为null
,因此会引发NullPointerException,因为无法从null
System.out.println
中获取第0个元素。println通过打印字符串null
来显式处理null大小写。感谢您的帮助!:)
Exception in thread "main" java.lang.NullPointerException
public class Case2{
public static void main(String[] args){
String a[][] = new String[2][2];
a[1][0] = null;
System.out.println(a[1][0]);
}
}