为什么System.out.println()没有抛出NullPointerException?

Suk*_*ana 7 java nullpointerexception

这可能是一个非常基本的问题,但我仍然不知道答案.

String abc = null;    
System.out.println(abc);
Run Code Online (Sandbox Code Playgroud)

为什么System.out.println打印"null"而不抛出NullPointerException

Jon*_*eet 11

它的行为就像它记录的那样.PrintStream.println(String)记录为:

打印一个字符串,然后终止该行.此方法的行为就像它调用print(String)然后println().

PrintStream.print(String) 记录为:

打印一个字符串.如果参数是null那么"null"打印字符串.否则,根据平台的默认字符编码将字符串的字符转换为字节,并且这些字节的编写方式与write(int)方法完全相同.

如有疑问,请阅读文档:)


Era*_*ran 6

因为它最终到达print方法,它为null String:打印"null" :

public void println(String x) {
    synchronized (lock) {
        print(x);
        println();
    }
}

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}
Run Code Online (Sandbox Code Playgroud)

打印任何空引用都存在相同的行为(在这种情况下,String.valueOf(null)返回"null"字符串:

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (lock) {
        print(s);
        println();
    }
}

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
Run Code Online (Sandbox Code Playgroud)