代码片段如下。
我知道字符串的默认值是 null
并且分配给 str
。我不明白为什么在第一种情况下打印 null
而在其他情况下不打印(如第二个代码片段)。
public class Case1{
static String str;
public static void main(String[] args){
System.out.println(str);
}
}
\\Code prints 'null' without quotes
public class Case2{
public static void main(String[] args){
String a[][] = { {}, null };
System.out.println(a[1][0]);
}
}
\\Code throws nullPointerException
任何解释将不胜感激。
答案 0 :(得分:5)
在你的第二个例子中,你正在做的是访问一个不存在的数组的第一个值:
String a[][] = { {}, null };
所以 a[1] 是空值,并且没有该空值的 [0]。
答案 1 :(得分:4)
在您的示例中,您试图访问 null 上的值。
看下面的代码
String a[][] = { {}, null };
System.out.println(a[1]);
它会打印
null
并且当您尝试访问 null 上的第 0 个元素时,它会抛出空指针期望,因为您尝试访问 null
上的元素String a[][] = { {}, null };
System.out.println(a[1][0]);
它会输出
Exception in thread "main" java.lang.NullPointerException
答案 2 :(得分:2)
在 case1 中,您只是打印字符串并且没有在那里分配值,因此默认情况下打印 null。您不对该字符串执行任何操作以在那里抛出 NullPointerException。因此它不会抛出任何异常。
在 case2 中,您将空值分配给字符串数组并尝试使用索引获取空对象。因此你得到了 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]);
}
}
\Code 打印不带引号的 'null'