只是想知道是否有任何理由明确地在一个对象上打toString()
来打印它?
MyClass obj = new MyClass(); // Assume toString() method is overriden in this class
System.out.println(obj);
System.out.println(obj.toString());
我显然使用第一种方法,但我的一位同事认为我应该放回obj.toString()
!我觉得toString()
只是多余的而不使用它实际上减少了NPE
的可能性!
我是否遗漏了某些内容,或者是否有理由明确使用toString()
?
答案 0 :(得分:7)
System.out
是PrintStream
的一个实例。如果您致电println()
,您将调用此代码:
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
所以尽管使用String
,它仍然只是转换为String.valueOf
。不同之处在于,String.valueOf(null)
为"null"
,如果不是toString()
,则无论如何都只调用对象null
。但在toString()
上调用null
会导致NullPointerException
肯定。
所以,使用前者。它更简单并处理null
。
答案 1 :(得分:4)
恕我直言不明确使用 toString()
,它可能导致空指针异常
答案 2 :(得分:4)
如果obj为null,则第二次调用将生成您指出的NPE。正如@Louis所说,如果obj不是null,它们基本上是一样的。
如果我想自定义MyClass的文字表示,我会优先覆盖toString(),不使用.toString()方法调用它来避免NPE的风险。