对某些人来说,这可能听起来很有趣或毫无根据。原谅我:)
我在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 :)
}
}
答案 0 :(得分:1)
println
专门处理空值。 System.out
只是PrintStream
类型的静态引用,以及PrintStream::println(Object)
状态的文档:
此方法首先调用String.valueOf(x)来获取打印对象的字符串值...
追踪它,String::valueOf(Object)
的javadoc状态:
返回:如果参数为null,则字符串等于“null”......