无法正确识别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
进行比较,而不是é
。天哪,我现在觉得自己很傻--非常感谢你发现了这一点!天啊,我现在觉得自己很笨-谢谢你发现了!