2015-04-19 112 views
0

我不明白,爲什麼下面的代碼:Java字符無法正確識別

public Image getLetter(String letterToGet) 
{ 
    System.out.println("é" == "e"); 

    System.out.println("Received: " + letterToGet); 

    if("\u00e9" == letterToGet.toLowerCase()); { 
     letterToGet = "SPECIALACCTAIGUESPECIAL"; 
    } 
    if("\u00e8" == letterToGet.toLowerCase()) { 
     letterToGet = "SPECIALACCTGRAVESPECIAL"; 
    } 

    System.out.println("searching for " + letterToGet + " in the hashmap"); 
    return languageMap.get(letterToGet.toLowerCase()); 
} 

可以返回輸出中

Traduction following ArrayList: [e, é, è] 
Received: e 
searching for SPECIALACCTAIGUESPECIAL in the hashmap 
Received: é 
searching for SPECIALACCTAIGUESPECIAL in the hashmap 
Received: è 
searching for SPECIALACCTAIGUESPECIAL in the hashmap 

按照這樣的邏輯下,爲什麼這條線返回false? !

System.out.println("\u00e9" == "e"); 
+0

可能的重複[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – alfasin

回答

2

意外輸出的原因是第一個if後面的額外分號。

目前,你有

if("\u00e9" == letterToGet.toLowerCase()); { 
    letterToGet = "SPECIALACCTAIGUESPECIAL"; 
} 

,其中分配給​​是if的範圍之外,所以它將運行,無論​​值。

+0

上帝,我現在覺得很愚蠢--.- 非常感謝您的發現! – velxundussa

2

記住,電子= E和u00e9 = E,這將返回true:

System.out.println("\u00e9" == ("é"));//Notice é instead of e 

請注意,即使這會在這種情況下工作,因爲我們比較字符文字(如@Pshemo解釋在評論中),確保你比較長的字符串與.equals

+0

pardon,「u00e9」= =「e」在我的問題中是一個錯字,實際的代碼有必要的「\ u00e9」,它會工作,將編輯問題,tahnks指出它! – velxundussa

+0

@velxundussa我的答案仍然解釋爲什麼它不輸出true。 –

+2

「這不是比較字符串的正確方法,你必須使用'equals'」其實* must *在這裏太強,''\ u00e9「==」é「'也會被評估爲'true',因爲編譯器會改變'「\ u00e9」'到'「é」'文字。由於所有文字都來自字符串池,因此這些字符串將表示字符串池中的相同對象,這意味着'=='將返回true。但正如你注意到的那樣,其中一個問題是,OP將'\ u00e9'與'e'比較,而不是'é'。 – Pshemo