2014-07-02 109 views

回答

4
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 

} 
+0

+1詳情/示例:) – async

5

有一個在初始化沒有區別,只是在聲明,因此在你的代碼的其餘部分將這兩個變量類型的方式。

1

兩者都是一樣的,X會引用字符串對象。

但是Object x = new String();中的x變量需要被類型轉換爲字符串,使用x.toString()(String)x才能使用它。

2

不同之處在於第一個選項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 
2
Object x = new String(); 

這裏,x只有到Object的方法和成員訪問。 (要使用String的成員,你必須強制轉換的xString(使用Downcasting in Java))

String x = new String(); 

這裏,x訪問所有的方法和Object以及String成員。

0

正如其他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 ,因爲這將允許您稍後將實現更改爲另一種類型的列表,而無需更改調用代碼。

0

區別是你需要投它很多 但是你可以使用相同的變量並用另一種類型重新初始化它。當你不斷變化的變量時,是非常有用的..

例子:

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

相關問題