用于String的java hashCode

时间:2015-02-01 13:46:11

标签: java hashcode

我有以下代码,但我不明白输出是如何工作的。

String s1 = "hello";
String s2 = "hello";

String s3 = new String("hello");
String s4 = new String("hello");

System.out.println(s1==s2);
System.out.println(s3==s4);

输出 true 然后 false 。但是所有s1,s2,s3和s4的哈希码值都是相同的。

然后如何返回true,另一个返回false。能不能让我明白这一点。

4 个答案:

答案 0 :(得分:0)

使用s1.equals(s2)进行String之间的比较,因为equals()检查值相等而==检查引用相等,==永远不会调用hashCode() }。

你的第一种情况是正确的,因为文字由编译器实现,因此引用同一个对象

String s1 = "hello";
String s2 = "hello";
System.out.println(s1==s2); // true

答案 1 :(得分:0)

== tests for reference equality.

.equals() tests for value equality.

== 与hashCode();

无关

答案 2 :(得分:0)

使用字符串文字创建的

s1和s2始终是相同的对象,从String常量池中检索。 另一方面,使用新的构造函数为s3和S4创建了两个新的String对象。

答案 3 :(得分:-1)

保罗罗是对的。 '=='检查这些对象是否存储在内存中的相同位置。如果哈希是相同的,则equals方法是suppost返回true,而不是'=='。