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