为什么没有在java中重写的toString()方法抛出NPE

时间:2015-12-09 05:42:49

标签: java

对某些人来说,这可能听起来很有趣或毫无根据。原谅我:)

我在java中重写了一个toString()方法,以查看创建的对象的内容,并且它可以在创建的有效对象中正常工作。当我使用空引用调用NullPointerException方法时,我怀疑是不应该抛出toString()

以下是我的代码段

public class Test {

    String name;
    public Test(String naam) {
        name = naam;
    }

    @Override
    public String toString() {
        return name;
    }

    void Display() {
        System.out.println("Display "+ name);
    }

    public static void main(String[] args) {

        Test validName = new Test("som");
        System.out.println("toString "+validName);
        validName.Display();

        validName = null;
        System.out.println(validName); // Prints "null" . Why doesnt it throw a NPE ?
        validName.Display(); // throws NPE for obvious reasons :) 
    }

}

1 个答案:

答案 0 :(得分:1)

println专门处理空值。 System.out只是PrintStream类型的静态引用,以及PrintStream::println(Object)状态的文档:

  

此方法首先调用String.valueOf(x)来获取打印对象的字符串值...

追踪它,String::valueOf(Object)的javadoc状态:

  

返回:如果参数为null,则字符串等于“null”......