无法正确识别Java字符

无法正确识别Java字符,java,unicode,Java,Unicode,我不明白为什么会出现以下代码: public Image getLetter(String letterToGet) { System.out.println("é" == "e"); System.out.println("Received: " + letterToGet); if("\u00e9" == letterToGet.toLowerCase()); { letterToGet = "SPECIALACCTAIGUESPECIAL";

我不明白为什么会出现以下代码:

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");

记住那句话=é和u00e9=é,则返回true:

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

请注意,即使在这种情况下,因为我们比较字符文字(如@Pshemo在注释中解释的),这也会起作用,请确保您将较长的字符串与
.equals

进行比较,记住e=é和u00e9=é,则返回true:

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

请注意,即使在这种情况下,由于我们比较字符文字(如注释中解释的@Pshemo),这也会起作用,请确保您将较长的字符串与
.equals
进行比较。意外输出的原因是第一个
if
后额外的分号

目前,你有

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

在这种情况下,对
letterGet
的赋值不在
if
的范围内,因此无论
letterGet
的值如何,它都将运行。意外输出的原因是在第一个
if
之后有一个额外的分号

目前,你有

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

如果
letteroget
的赋值不在
if
的范围内,那么它将运行,无论
letteroget
的值是多少,都将运行可能重复的赦免,“u00e9”=“e”在我的问题中是一个输入错误,实际代码有必要的“\u00e9”使其工作,将编辑问题,谢谢你指出这一点@velxundussa我的回答仍然解释了为什么它不输出true。“这不是比较字符串的正确方法,您必须使用
equals
”实际上在这里必须太强,
“\u00e9”==“é”
也将被计算为
true
,因为编译器将
“\u00e9”
更改为“é”literal”。由于所有文本都来自字符串池,所以这些字符串将表示字符串池中的相同对象,这意味着
=
将返回true。但正如您正确地注意到的,这里的一个问题是OP将
\u00e9
e
进行比较,而不是
e
。请原谅,“u00e9”==“e”在我的问题中是一个打字错误,实际的代码有必要的“\u00e9”使其工作,将编辑问题,以供指出@velxundussa我的回答仍然解释了为什么它不输出true。“这不是比较字符串的正确方法,您必须使用
equals
”实际上在这里必须太强,
“\u00e9”==“é”
也将被计算为
true
,因为编译器将
“\u00e9”
更改为“é”literal”。由于所有文本都来自字符串池,所以这些字符串将表示字符串池中的相同对象,这意味着
=
将返回true。但正如你正确地注意到的,这里的一个问题是OP将
\u00e9
e
进行比较,而不是
é
。天哪,我现在觉得自己很傻--非常感谢你发现了这一点!天啊,我现在觉得自己很笨-谢谢你发现了!