什麼是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
什麼是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
比較包含字符串的對象時,不應使用==
。一般==
比較引用,所以它只返回true
只有相同的對象。您應該使用equals()
方法來代替:str1.equals(str2)
它偶爾爲你的作品在第一種情況下因爲Java緩存字符串常量,因此,在這兩種情況下"java"
由字符串的相同實例表示。
==
上的對象通過引用進行比較。由於稱爲內化的特徵,第一對字符串被認爲是相同的。要爲內容相等比較字符串,請使用
s1.compareTo(s2) == 0
或
s1.equals(s2)
只有一個字符串常量的例子,例如,"ohai"
,所以==
會奏效。
新String
對象就是這樣,新的對象,可以從另一個字符串的值創建。
字符串應該幾乎總是與.equals
比較,例如,
str1.equals(str2);
與此相比串值,而不是引用。
在第一種情況下,你已經宣佈SE1和SE2爲字符串文字。因此,您可以使用==運算符來比較兩個字符串。
但是在後一種情況下STR1和STR2是字符串對象並因此通過==運營商compairing失敗。要比較兩個對象,您應該使用等於方法。
我確定這個問題已經被問過很多次了。請使用搜索。 –
http://stackoverflow.com/questions/767372/java-string-equals-versus – StarsSky
「OKAY」被攔截。但是新的String(「OKAY」)創建一個**新的** String對象,其字符與被攔截的「OKAY」相同。 –