有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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。不能对空对象调用方法
问题是为什么前两张照片有效?他们不是也在打电话吗


共 (3) 个答案

  1. # 1 楼答案

    看看print(String s)的实现:

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

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

  2. # 2 楼答案

    不,不是

    System.out是一个PrintStream,它对参数调用String.valueOf(x)(如Javadoc中所述)

  3. # 3 楼答案

    不,不是

    System.out.println(*)的内部有一个空指针检查

    类似于

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

    (*)参数经过^{}处理