测试字符串的hashCode

时间:2012-12-05 12:19:02

标签: java string hashcode

我正在编写如下代码:

String s1=new String("hi");
System.out.println(s1.hashCode());
String s2=new String("hi");
System.out.println(s2.hashCode());
String s3=s1.intern();
String s4=s2.intern();
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());

当我运行代码时,所有变量都会打印相同的哈希码:

3329
3329
3329
3329

上述代码的输出是否正确?

3 个答案:

答案 0 :(得分:7)

是的,这是正确的输出。 The hashCode of String基于字符串的内容(以非常具体的方式,在上面链接的文档中记录)。

由于s1s2s3s4都具有相同的内容(" hi"),它们都返回相同的hashCode

实际上需要,因为a.equals(b)返回true的对象需要为{{1}返回相同的值}和a.hashCode()

请注意,相反的(即#34;具有相同哈希码的对象必须相等")不正确并且甚至无法完成(只需考虑有b.hashCode()个值可能比String值多得多,请参阅the pigeonhole principle)。

答案 1 :(得分:3)

所有字符串都是equal,因此它们具有相同的哈希码是有意义的。这是哈希码定义in Object的合同的一部分:

  

如果两个对象根据equals(Object)方法相等,则对两个对象中的每个对象调用hashCode方法必须生成相同的整数结果。

答案 2 :(得分:1)

如果我错了,有人会纠正我,但我想是的,这是正确的输出,因为你得到字符串“hi”的hascode而不是字符串对象。这正是hashcode-method应该做的事情。