两个字符串实例看起来相同,但它们的哈希码是不同的

时间:2015-05-11 08:56:09

标签: java string hashcode

    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

3 个答案:

答案 0 :(得分:4)

您已在第二个字符串的开头插入零宽度不间断空格(U + FEFF)字符。

该字符串实际上等于以下字符串(没有隐藏的unicode字符):a

这意味着blocation.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,我得到了与你相同的结果 - 代码编译和运行,但输出不同的哈希码。通过使用普通双引号修复双引号,哈希码现在是相同的。