为什么System.out.print对null对象有效?

时间:2016-11-14 13:38:30

标签: java

让我们考虑以下代码:

public static void main(String[] args) {
    Integer i = null;
    Object o = null;

    System.out.println(i);
    System.out.println(o);

    System.out.println(i.toString());
    System.out.println(o.toString());
}

很明显,最后两次打印会导致NullPointerException。无法在null对象上调用方法。
问题是为什么前两个印刷品有效?他们不是也在呼叫toString()吗?

3 个答案:

答案 0 :(得分:4)

不,他们不是。

System.outPrintStream,它会在参数上调用String.valueOf(x)(如Javadoc中所述)。

答案 1 :(得分:2)

不,他们不是。

System.out.println(*)。

内有空指针检查

的内容
println(x == null ? "null" : x.toString());

(*)参数通过String#valueOf来处理这个问题。

答案 2 :(得分:1)

查看print(String s)的实现:

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}

如果对象恰好是null,它只会写"null"。取自java.io.PrintStream:GrepCode