String a = "success";
String b = "success";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
if(a.equals(b)){
System.out.println("123");
}
我无法理解为什么这两个字符串有不同的哈希码。
String a = "success";
String b = "success";
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b));
输出:
-1867169789
1954952228
33263331
6413875
答案 0 :(得分:4)
您已在第二个字符串的开头插入零宽度不间断空格(U + FEFF)字符。
该字符串实际上等于以下字符串(没有隐藏的unicode字符):a
这意味着b
和location.href = "Pagename.html";
不相等,并且没有相同的哈希码。
答案 1 :(得分:1)
public class Compare {
public static void main(String args[]) {
String a = "success";
String b = "success";
char[] aChar = a.toCharArray();
char[] bChar = b.toCharArray();
for(int i = 0; i < aChar.length; i++)
{
System.out.println((int)aChar[i]);
}
System.out.println("");
for(int i = 0; i < bChar.length; i++)
{
System.out.println((int)bChar[i]);
}
}
}
第二个字符串的第一个字符是char 65279.你是否从某个地方复制了字符串?
字符串看起来一样,但不是。尝试输入&#34;成功&#34;再次发短信,然后就可以了。
答案 2 :(得分:0)
当我将代码复制并粘贴到我的IDE中时,它显示b =&#34;成功的开头双引号实际上是一个奇怪的双引号而不是标准的双引号。 Bizzarrely,我得到了与你相同的结果 - 代码编译和运行,但输出不同的哈希码。通过使用普通双引号修复双引号,哈希码现在是相同的。