2013-02-03 135 views
-6

可能重複:
Questions about Java’s String pool我應該如何聲明字符串?

什麼是Java中聲明字符串的兩種方法之間的區別?

String se1 = "java"; 
String se2 = "java"; 
System.out.println(se1 == se2); // output true 

String str1 = new String("OKAY"); 
String str2 = new String("OKAY"); 
System.out.println(str1 == str2); // output false 
+5

我確定這個問題已經被問過很多次了。請使用搜索。 –

+0

http://stackoverflow.com/questions/767372/java-string-equals-versus – StarsSky

+2

「OKAY」被攔截。但是新的String(「OKAY」)創建一個**新的** String對象,其字符與被攔截的「OKAY」相同。 –

回答

1

比較包含字符串的對象時,不應使用==。一般==比較引用,所以它只返回true只有相同的對象。您應該使用equals()方法來代替:str1.equals(str2)

它偶爾爲你的作品在第一種情況下因爲Java緩存字符串常量,因此,在這兩種情況下"java"由字符串的相同實例表示。

2

==上的對象通過引用進行比較。由於稱爲內化的特徵,第一對字符串被認爲是相同的。要爲內容相等比較字符串,請使用

s1.compareTo(s2) == 0 

s1.equals(s2) 
2

只有一個字符串常量的例子,例如,"ohai",所以==會奏效。

String對象就是這樣,新的對象,可以從另一個字符串的值創建。

字符串應該幾乎總是與.equals比較,例如,

str1.equals(str2); 

與此相比串,而不是引用。

1

在第一種情況下,你已經宣佈SE1SE2字符串文字。因此,您可以使用==運算符來比較兩個字符串

但是在後一種情況下STR1STR2字符串對象並因此通過==運營商compairing失敗。要比較兩個對象,您應該使用等於方法。