2015-04-19 81 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