2014-01-10 30 views
2

想知道是否有任何理由在對象上顯式調用toString()以打印它?明確使用toString()方法以Java打印對象的任何原因

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

不,你不會錯過什麼。這基本上只是一個味道問題。 –

+2

不,你不必使用'toString()'explicitely.'print()'將調用'String.valueOf(obj)',如果obj'爲null或'obj.toString()將返回「null」 '; –

回答

4

如果obj正如你所指出空的第二個電話會產生NPE。正如@Louis所說,如果obj不爲null,它們基本上是一樣的。

如果我想自定義MyClass的文字表示方法,並且不使用.toString()方法來避免NPE的風險,我會優先考慮重寫toString()。

4

恕我直言,不使用toString()明確,它可能會導致空指針異常

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",如果它不是null,則只需在對象上調用toString()即可。但在null上調用toString()肯定會導致NullPointerException

所以,使用前者。這很簡單,並處理null

相關問題