我有以下代码,但我不明白输出是如何工作的。
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。能不能让我明白这一点。
答案 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)