2011-09-15 78 views
2

可能重複:
Java string comparison?(「kg」==「kg」)返回false。我如何告訴java,這個比較返回true?

我試圖做到這一點:

boolean exit = false; 
while(exit==false && convStoreIndex<convStoreLength) { 
    if(conversionStore[convStoreIndex].getInUnit()==inUnit) { 
    indexCount++; 
    exit=true; 
    } 
    convStoreIndex++; 
} 

但如果條件從來沒有真正的,即使兩個絲線的相同(在調試器中檢查過)。 所以我加了一些行:

boolean exit = false; 
while(exit==false && convStoreIndex<convStoreLength) { 
    Log.v("conversionStore["+String.valueOf(convStoreIndex)+"]", conversionStore[convStoreIndex].getInUnit()+"|"+inUnit); 
    String cs = conversionStore[convStoreIndex].getInUnit(); 
    String iu = inUnit; 
    Log.v("cs", cs); 
    Log.v("iu", iu); 
    Log.v("Ergebnis(cs==iu)", String.valueOf(cs==iu)); 
    if(conversionStore[convStoreIndex].getInUnit()==inUnit) { 
    indexCount++; 
    exit=true; 
    } 
    convStoreIndex++; 
} 

,這裏是從logcat中提取:

09-15 11:07:14.525: VERBOSE/cs(585): kg 
09-15 11:07:16.148: VERBOSE/iu(585): kg 
09-15 11:07:17.687: VERBOSE/Ergebnis(cs==iu)(585): false 

類conversionStore的:

class ConversionStore { 
    private String inUnit; 
    [...] 
    public String getInUnit() { 
    return inUnit; 
    } 
} 

誰是瘋狂,JAVA還是我?

+3

你的標題也是誤導,因爲你沒有 「公斤」 == 「公斤」(我認爲,實際上評估爲true)。 –

+1

在Zukunft'!exit' statt'exit == false' schreiben中bit bit。 – starblue

回答

13

不要使用==比較String對象,請使用.equals()

if(conversionStore[convStoreIndex].getInUnit().equals(inUnit)) { 
+2

我其實很高興今天我已經超過了我的200分上限,因爲得到140代表這個答案就是錯的。特別是因爲它是一個明確的重複。 –

4

請使用String.equals()通過字符串的內容,而不是參考身份比較。

6

要比較字符串是否相等,請不要使用==。 ==運算符檢查 以查看兩個對象是否完全相同。兩個字符串可能是不同的對象,但具有相同的值(其中有完全相同的 字符)。使用.equals()方法比較 相等的字符串。

直接從谷歌搜索 「Java字符串比較」 時提供的第一個鏈接...

3

您使用==是在比較你的Stringscs==iu

但是,只有當兩個Strings實際上是相同的對象時,纔會返回true。情況並非如此:您有兩個不同的String實例包含相同的值。您可以使用String.compareTo(String)

2

兩件事情: 你不需要寫「布爾==假」,你可以只寫那麼在你的榜樣,這將是「布爾!」:

while(!exit && convStoreIndex<convStoreLength) { 

第二件事: 比較兩個字符串使用字符串。等於(字符串x)的方法,所以這將是:

if(conversionStore[convStoreIndex].getInUnit().equals(inUnit)) { 
3

使用==

becase的的.equals();方法instread ::

他們都在他們的意義不同非常多。 equals()方法存在於java.lang.Object類中,並且期望檢查對象狀態的等價性!這意味着,對象的內容。而'=='操作符預計會檢查實際的對象實例是否相同。例如,假設您有兩個String對象,它們被兩個不同的引用變量s1和s2指向。現在

s1 = new String("abc"); 
s2 = new String("abc"); 

,如果使用「的equals()」方法來檢查它們的等價作爲

if(s1.equals(s2)) 
    System.out.println("s1.equals(s2) is TRUE"); 
else 
    System.out.println("s1.equals(s2) is FALSE"); 

您將得到輸出TRUE作爲「的equals()」的方法檢查內容平等。

讓檢查 '==' 操作者..

if(s1==s2) 
System.out.printlln("s1==s2 is TRUE"); 

別的 的System.out.println( 「S1 == s2爲FALSE」);

現在您將獲得FALSE作爲輸出,因爲s1和s2都指向兩個不同的對象,即使它們都共享相同的字符串內容。這是因爲每創建一個新對象時都會使用'new String()'。

嘗試不「新字符串」,只是用

String s1 = "abc"; 
String s2 = "abc"; 

您將獲得真正的兩個測試運行程序。

立信::

After the execution of String str1 = 「Hello World!」; the JVM adds the string 「Hello World!」 to the string pool and on next line of the code, it encounters String str2 =」Hello World!」; in this case the JVM already knows that this string is already there in pool, so it does not create a new string. So both str1 and str2 points to the same string means they have same references. However, str3 is created at runtime so it refers to different string.