Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试字符串的哈希代码_Java_String_Hashcode - Fatal编程技术网

Java 测试字符串的哈希代码

Java 测试字符串的哈希代码,java,string,hashcode,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()

我正在编写如下代码:

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

上述代码的输出正确吗?

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

由于
s1
s2
s3
s4
都具有相同的内容(“hi”),因此它们都返回相同的hashCode

这实际上是必需的,因为
a.equals(b)
返回
true
的对象必须为
a.hashCode()
b.hashCode()返回相同的值


注意,相反的(即“同一个哈希代码的对象必须相等”)是不正确的,甚至不能在一般情况下进行(简单地认为,存在比代码< int 值更大的可能<代码>字符串< /代码>值,请参阅)。这是hashcode合同的一部分,定义如下:

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


如果我错了,有人会纠正我,但我认为是的,这是正确的输出,因为您得到了字符串“hi”的hascode,而不是字符串对象的hascode。这正是hashcode方法应该做的。

有理由怀疑JVM的输出吗?您期望得到什么?您还可以尝试
“iJ”.hashCode()
来确认不同的字符串也可以生成相同的哈希。