测试字符串的hashCode

use*_*962 2 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());
Run Code Online (Sandbox Code Playgroud)

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

3329
3329
3329
3329
Run Code Online (Sandbox Code Playgroud)

这是上述代码的正确输出吗?

Joa*_*uer 7

是的,这是正确的输出.所述hashCodeString是基于内容的字符串(在一个非常特定的方式,连接到上述的文档中记录).

而且,由于s1,s2,s3s4都具有相同的内容("HI"),他们都返回相同的哈希码.

这实际上是要求,因为到物体a.equals(b)的回报true需要为返回相同的数值a.hashCode()b.hashCode().

请注意,相反的(即"具有相同哈希码的对象必须相等")不是真的,甚至一般都不能完成(只考虑有String比值更多的可能int值,请参阅鸽子原理).