2015-12-27 55 views
-1

我有一個關於下面的代碼問題:Assinging任意值對象類型

Object o; 
o = "Some string"; 
System.out.println(o.toString()); //Some string 
o = 666; 
System.out.println(o.toString()); //666 

怎麼說,對象的內容可以在沒有任何強制轉換打印?它真的如此普遍的容器嗎?

回答

4

這只是由於多態性。 Object定義方法toString(),並在String和Integer中重寫。

Object o; 
o = "Some string";     // o is now a String. 
System.out.println(o.toString()); // so calls String::toString(). 
o = 666;       // o is now an Integer. 
System.out.println(o.toString()); // so calls Integer::toString(). 

如果方法toString()沒有在Object中定義,則該轉換將是必需的。

0

toString()方法是在Object類中定義的,所以從某種意義上說,是的,它確實是一個「通用」容器。

但是,與任何特定對象關聯的許多有用功能都在對象子類型的引用中。一旦你給一個對象分配了一個字符串,你就不能訪問像substring()這樣的東西。使用Object引用可以訪問的功能是有限的。

0

來自doc
類對象是類層次結構的根。每個類都有Object作爲超類。所有的對象,包括數組,都實現了這個類的方法。

它不是通用容器可以這麼說。原始類型不是Object

在您的示例中,您正在存儲StringInteger,它繼承自Object。由於ObjecttoString()方法,您不需要施放它。