我有一個關於下面的代碼問題:Assinging任意值對象類型
Object o;
o = "Some string";
System.out.println(o.toString()); //Some string
o = 666;
System.out.println(o.toString()); //666
怎麼說,對象的內容可以在沒有任何強制轉換打印?它真的如此普遍的容器嗎?
我有一個關於下面的代碼問題:Assinging任意值對象類型
Object o;
o = "Some string";
System.out.println(o.toString()); //Some string
o = 666;
System.out.println(o.toString()); //666
怎麼說,對象的內容可以在沒有任何強制轉換打印?它真的如此普遍的容器嗎?
這只是由於多態性。 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中定義,則該轉換將是必需的。
toString()
方法是在Object類中定義的,所以從某種意義上說,是的,它確實是一個「通用」容器。
但是,與任何特定對象關聯的許多有用功能都在對象子類型的引用中。一旦你給一個對象分配了一個字符串,你就不能訪問像substring()
這樣的東西。使用Object引用可以訪問的功能是有限的。
來自doc:
類對象是類層次結構的根。每個類都有Object作爲超類。所有的對象,包括數組,都實現了這個類的方法。
它不是通用容器可以這麼說。原始類型不是Object
。
在您的示例中,您正在存儲String
和Integer
,它繼承自Object
。由於Object
有toString()
方法,您不需要施放它。