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

时间:2014-01-10 23:11:55

标签: java tostring

只是想知道是否有任何理由明确地在一个对象上打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()

3 个答案:

答案 0 :(得分:7)

System.outPrintStream的一个实例。如果您致电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的风险。