當我使用System.out.println(obj.getClass())
它不會給我任何錯誤。據我所知getClass()
返回一個類的類型。 由於println()
只會打印字符串,怎麼來代替一個類,println
是得到一個字符串?Java。 getClass()返回一個類,我怎麼能得到一個字符串?
回答
Java中的所有對象都繼承自類Object。如果您查看該文檔,您會看到Object
指定了一個toString
方法,該方法將該對象轉換爲字符串。由於所有非原始類型(包括Class
es)都是Object
s,因此可以使用其toString
方法將任何內容轉換爲字符串。
類可以覆蓋這種方法提供自己的方式被轉換成字符串。例如,String
類重寫Object.toString
以返回自身。 Class
重寫它以返回類的名稱。這使您可以指定如何輸出對象。
System.out.println(someobj)
總是等同於:
System.out.println(String.valueOf(someobj));
而且,對於someObj中的非空值,即打印someobj.toString();
在你的情況,你正在做println(obj.getClass())
所以你真的做:
System.out.println(String.valueOf(obj.getClass()));
它呼籲類toString
方法。
+1,最準確。從PrintStream.println(Object)的API文檔:「此方法首先調用String.valueOf(x)以獲取打印對象的字符串值...「 – 2013-05-05 14:27:00
對子問題抱歉,但是有什麼理由使用String.valueOf()而不是'object.toString()'?我注意到Java API的其他部分也使用'String.valueOf',而我通常會使用後者。 – jazzbassrob 2013-05-05 14:49:37
@jazzbassrob:String.valueOf(Object obj)的標準定義是'return(obj == null)?「null」:obj.toString();',所以它是基本上是一樣的,加上'null'處理, – Keppil 2013-05-05 14:53:20
正如您可能知道的那樣,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]」。
+1,但我會用一個不同的例子,因爲'Integer'可以隱式地轉換 – nullptr 2013-05-05 14:29:34
@nullptr你說得對,這是一個可怕的例子! – jazzbassrob 2013-05-05 14:32:24
見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
當對象爲空:)
- 1. ,我怎麼能在一個字符串
- 2. 我怎麼能在一個字符串
- 3. 當我得到一個字符串時返回一個對象
- 4. 在JavaScript中,我怎麼能得到的最後一個字符的字符串
- 5. 我怎樣才能得到一個字符串,並返回每次從數組中的字符串?
- 6. 找到一個字符串,但返回前一個字符串
- 7. 我想返回一個對象,但我得到一個字符串
- 8. 我怎麼能寫一個特殊字符:「到一個文件
- 9. 用Java RMI返回一個字符串
- 10. 在Java中返回一個字符串
- 11. 用toString返回一個字符串java
- 12. 我怎樣才能得到這個Python函數返回一個字符串,而不是一個包含一個字符串的列表?
- 13. 爲什麼我不能從AsyncTask返回一個字符串?
- 14. 返回一個字符串
- 15. 我怎麼能傳遞一個「&」到一個查詢字符串值
- 16. 爲什麼`+ [[]] + [[]]`返回一個字符串?
- 17. 我怎樣才能得到一個JSON POST的結果返回
- 18. 必須在zend2中返回一個字符串值。怎麼樣?
- 19. 我沒有返回一個字符串?
- 20. 我怎麼才能找到一切,直到PHP中的其他東西,並返回一個字符串?
- 21. 爲什麼我的字符串返回一個字符?
- 22. 我怎樣才能得到一個url請求的內容到一個字符串在java flash-actionscript
- 23. 我怎樣才能得到一個名爲的MessagingService類的Java
- 24. 不能得到Task.Result返回字符串,除非我添加一個Thread.Sleep
- 25. 我怎樣才能返回一個Spring MVC ModelAndView作爲字符串到一個JSONResponse對象?
- 26. 我需要從一個類返回多個字符串
- 27. 得到一個字符串
- 28. 我怎麼能得到一個普通類div的內容
- 29. 返回一個字符串到一個文本字段
- 30. WriteUTF和ReadUTF,我怎樣才能寫一個字符串,並在另一方得到一個短暫的異常?
'obj.getClass()的getName()'?或'obj.getClass()。toString()' – 2013-05-05 14:24:29