在Java中打印null

9
在执行以下代码行时:
    System.out.println(null);

结果显示在控制台上打印null

为什么会这样呢?


4
这个问题可以通过阅读Java文档来得到答案。 - Stephen C
5个回答

21

根据来源于OpenJDK 1.6.0_22的代码:

PrintStream:

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

字符串:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

9
实际上,在Java版本1.8.0中,System.out.println(null)不应该打印null。你会得到一个错误,说像这样:reference to println is ambiguous, both method println(char[]) in PrintStream and method println(String) in PrintStream match。你需要进行如下强制转换:System.out.println((String)null)。参见coderanch帖子here。我想你也可以使用System.out.println(null+"")来实现相同的效果。

6

4

最终会调用String.valueOf(Object)方法,该方法的实现如下:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

2
当我查看PrintStream的javadoc时,我发现(以下为引用):

print

public void print(String s)

打印一个字符串。如果参数为null,则打印字符串“null”。否则,根据平台的默认字符编码将字符串的字符转换为字节,并以与write(int)方法完全相同的方式写入这些字节。参数:s - 要打印的字符串

希望这能回答您的问题..

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接