什麼是兩個初始化之間的差異:這兩個初始化有什麼區別:Object x = new String(); String x = new String();
Object x = new String();
String x = new String();
在Java
謝謝!
什麼是兩個初始化之間的差異:這兩個初始化有什麼區別:Object x = new String(); String x = new String();
Object x = new String();
String x = new String();
在Java
謝謝!
Object x = new String(); // pointing to a String and saying - Hey, Look there! Its an Object
String x = new String();// pointing to a String and saying - Hey, Look there! Its a String
更重要的是: 可以訪問字符串的方法取決於參考。例如:
public static void main(String[] args) {
Object o = new String();
String s = new String();
o.split("\\."); // compile time error
s.split("\\."); // works fine
}
+1詳情/示例:) – async
有一個在初始化沒有區別,只是在聲明,因此在你的代碼的其餘部分將這兩個變量類型的方式。
兩者都是一樣的,X會引用字符串對象。
但是Object x = new String();
中的x變量需要被類型轉換爲字符串,使用x.toString()
或(String)x
才能使用它。
不同之處在於第一個選項x
將被編譯器視爲Object,第二個選項將被視爲String。例如:
public static void main (String[] args) throws Exception {
Object x = new String();
test(x);
String y = new String();
test(y);
// and you can also "trick" the compiler by doing
test((String)x);
test((Object)y);
}
public static void test(String s) {
System.out.println("in string");
}
public static void test(Object o) {
System.out.println("in object");
}
會打印:
in object
in string
in string
in object
Object x = new String();
這裏,x
只有到Object
的方法和成員訪問。 (要使用String
的成員,你必須強制轉換的x
到String
(使用Downcasting in Java))
String x = new String();
這裏,x
訪問所有的方法和Object
以及String
成員。
正如其他answerers所指出的,這兩種情況都會導致變量x持有對String的引用。唯一的區別是後續代碼將如何看到引用:作爲Object vs String,即確定編譯器允許引用哪些操作。基本上,這個問題突出了靜態類型語言(例如Java)和動態類型(例如Python,Javascript等)之間的差異。在後者,你不必聲明引用的類型,所以這個代碼僅僅是這樣的:
var x = new String();
在這種情況下,編譯器推斷在運行的類型,但你輸了一些靜態類型檢查編譯時間。
在日常的Java代碼,你將永遠使用形式:
String x = new String();
因爲這可以讓你把X像一個字符串,並調用,例如方法toUpperCase()
就可以了。如果x是Object
,編譯器將不允許你調用該方法,只有Object方法,例如equals()
。
然而,事實正好相反。在下面的情況:
List list = new ArrayList();
ArrayList list = new ArrayList();
除非您特別希望使用的ArrayList(不太可能)公開的方法,它始終是更好申報list
作爲List
,不ArrayList
,因爲這將允許您稍後將實現更改爲另一種類型的列表,而無需更改調用代碼。
區別是你需要投它很多 但是你可以使用相同的變量並用另一種類型重新初始化它。當你不斷變化的變量時,是非常有用的..
例子:
Object x = new String();
if(x instanceof String){
System.out.println("String");
}
x = new ArrayList<String>();
if(x instanceof ArrayList){
System.out.println("ArrayList");
}
回報:
字符串 的ArrayList
的'Object'不是'String' .. 。 –