2013-05-05 69 views

回答

17

Java中的所有對象都繼承自類Object。如果您查看該文檔,您會看到Object指定了一個toString方法,該方法將該對象轉換爲字符串。由於所有非原始類型(包括Class es)都是Object s,因此可以使用其toString方法將任何內容轉換爲字符串。

類可以覆蓋這種方法提供自己的方式被轉換成字符串。例如,String類重寫Object.toString以返回自身。 Class重寫它以返回類的名稱。這使您可以指定如何輸出對象。

35

System.out.println(someobj)總是等同於:

System.out.println(String.valueOf(someobj)); 

而且,對於someObj中的非空值,即打印someobj.toString();

在你的情況,你正在做println(obj.getClass())所以你真的做:

System.out.println(String.valueOf(obj.getClass())); 

它呼籲類toString方法。

+2

+1,最準確。從PrintStream.println(Object)的API文檔:「此方法首先調用String.valueOf(x)以獲取打印對象的字符串值...「 – 2013-05-05 14:27:00

+1

對子問題抱歉,但是有什麼理由使用String.valueOf()而不是'object.toString()'?我注意到Java API的其他部分也使用'String.valueOf',而我通常會使用後者。 – jazzbassrob 2013-05-05 14:49:37

+6

@jazzbassrob:String.valueOf(Object obj)的標準定義是'return(obj == null)?「null」:obj.toString();',所以它是基本上是一樣的,加上'null'處理, – Keppil 2013-05-05 14:53:20

3

正如您可能知道的那樣,Java中的每個類都繼承自Object類。這意味着每個類都自動具有方法toString(),該方法將對象的表示形式返回爲String。當您將字符串與對象連接起來,或者如果將Object傳遞給應該有String的參數時,Java會自動調用toString()方法將其轉換爲String。在你的情況下,toString()方法已被覆蓋返回類的名稱。

你可以看到這樣的情況與其他對象,也:

Set s = new Set(); 
s.add(1); 
s.add(3); 
s.add(5); 
System.out.println(s); 

將輸出 「[1,3,5]」。

+0

+1,但我會用一個不同的例子,因爲'Integer'可以隱式地轉換 – nullptr 2013-05-05 14:29:34

+0

@nullptr你說得對,這是一個可怕的例子! – jazzbassrob 2013-05-05 14:32:24

4

the code

787  public void println(Object x) { 
788   String s = String.valueOf(x); 
789   synchronized (this) { 
790    print(s); 
791    newLine(); 
792   } 
793  } 

注意String.valueOf(x)

獎金詢問一個很好的問題:

632  public void print(String s) { 
633   if (s == null) { 
634    s = "null"; 
635   } 
636   write(s); 
637  } 

這就是爲什麼它打印null當對象爲空:)

相關問題