有任何理由明确使用toString()方法在Java中打印对象

end*_*ess 2 java tostring

只是想知道是否有任何理由toString()明确地调用对象来打印它?

MyClass obj = new MyClass(); // Assume toString() method is overriden in this class
System.out.println(obj);

System.out.println(obj.toString());
Run Code Online (Sandbox Code Playgroud)

我显然使用第一种方法,但我的一位同事争辩说我应该放弃它obj.toString()!我觉得toString()只是多余而不使用它实际上减少了机会NPE!

我错过了什么或者有没有理由toString()明确使用?

Sea*_*wen 7

System.out是一个实例PrintStream.如果你打电话,println()你将调用此代码:

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以它只是转换为一个String,尽管使用String.valueOf.不同之处在于,如果不是,那String.valueOf(null)就是"null"调用toString()对象null.但调用toString()null引起NullPointerException了肯定.

所以,使用前者.它更简单和处理null.