我正在使用JSP中的Java代碼,我試圖比較字符串,並且遇到問題。Java中的字符串比較
我宣佈兩個字符串
s1 = "din";
s2 = "din";
然而,if (s1 == s2)
永遠不會執行。有人能幫我嗎?
我正在使用JSP中的Java代碼,我試圖比較字符串,並且遇到問題。Java中的字符串比較
我宣佈兩個字符串
s1 = "din";
s2 = "din";
然而,if (s1 == s2)
永遠不會執行。有人能幫我嗎?
你到底想達到什麼目的?
比較字符串或它們的值? 如果你期待,你(如果)條件應該返回true,則使用
s1.equals(s2);
比較字符串時,你應該始終使用equals方法,而不是==:
if(str1.equals(str2))
...會正確的做事方式。
在哪裏產生了困惑就像是以下情況:
String str1 = "hello";
String str2 = "hello";
System.out.println(str1==str2);
以上將實際打印出真實的。但是,除了上述的學術目的外,您不應該使用它。如果你正在使用==,你正在檢查這些值是否是堆中物理上相同的對象。如果你使用.equals(),你會檢查它們是否有意義的相等,即使它們實際上是兩個單獨的對象。 有時候,特別是像上面那樣涉及文字時(或者當您手動調用intern()
方法時),出於性能原因,Java會自動使兩個單獨的字符串對象指向同一個對象。然而,沒有合理的保證會發生(除非你想打擾自己的JLS的明確細節,即使如此,它只是有保證),大多數情況下不會。以下例如:
String str1 = "hello";
String str2 = "he";
str2 += "llo";
System.out.println(str1 == str2);
現在它打印錯誤,因爲儘管有意義相等,我們還沒有達到Java以前提供的相同的優化。
在上述兩種情況下,使用equals()將返回true。
在Java語言規範中,當字符串是相同的對象時有一些保證,但是你是對的,總是更好地使用'equals'。 – 2011-03-13 01:33:24
@PaŭloEbermann好點 - 我的意思是從邏輯的角度來看更多,而不是瞭解JLS的細節。 – berry120 2011-03-13 01:34:55
請顯示您的實際代碼。你在使用scriptlets嗎? (請不要) – 2011-03-12 23:31:31
在一些JVM上,這實際上會工作,因爲他們實習所有字符串常量。 – Neil 2011-03-12 23:44:36
您應該使用.equals比較平等(如其他人所述)。但是,請注意,在給出的例子中(s1 == s2)通常會等於true,因爲字符串文字將被實現(s1和s2將引用同一個對象) – Neil 2011-03-12 23:44:52