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)
这是上述代码的正确输出吗?
是的,这是正确的输出.所述hashCode的String是基于内容的字符串(在一个非常特定的方式,连接到上述的文档中记录).
而且,由于s1,s2,s3和s4都具有相同的内容("HI"),他们都返回相同的哈希码.
这实际上是要求,因为到物体a.equals(b)的回报true是需要为返回相同的数值a.hashCode()和b.hashCode().
请注意,相反的(即"具有相同哈希码的对象必须相等")不是真的,甚至一般都不能完成(只考虑有String比值更多的可能int值,请参阅鸽子原理).