2010-01-12 128 views
0

不應該通過一個對象平等?equals()方法?

String hej = pets.getBark(); 
    if(hej.equals("woff")) 

爲什麼你能夠傳遞一個字符串woff?

+2

字符串是一個對象。 – 2010-01-12 06:44:04

回答

2

引擎蓋下,一個字符串(引號內的文本)自動由String實例代替。 (文字字符串是new String簡寫)

這就是爲什麼這個代碼工作:String hello = "hello";

所以,

String hej = pets.getBark(); 
if(hej.equals(new String("woff"))) {} 

等同於你所提供的代碼。

+3

實際上並不完全一樣,由於字符串interning,IIRC。 – 2010-01-12 04:22:22

2

帶引號的字符串是一個對象。它是String類的一個實例。

6

如果我正確理解您的問題,您想知道爲什麼字符串值可以傳遞給接受類型爲String的參數的方法。這是因爲一個字符串文字是一個String實例的簡寫(新的實例或已被保留通過實習的方式以前創建的實例):

String類描述字符 字符串。 Java 程序(如「abc」)中的所有字符串文字都是 ,其實現爲此 類的實例。

2

您可以通過java.lang.Stringjava.lang.Object的子類型,因爲Liskov substitution principle這樣說。

+0

不是什麼OP問,但仍然是一個好點。 – 2010-01-12 04:32:15