字符串池中的字符串和字符串池外堆中的字符串如何具有相同的hashCode



考虑下面给出的一段代码。我想知道字符串池"s1"或"s2"中的字符串如何与堆中的字符串"s3"具有相同的hashCode,但在字符串池之外。

class Test{
public static void main(String[] args) {
String st1 = "Shiva";
String st2 = "Shiva";
String st3 = new String("Shiva");
System.out.println(st1 == st2);
System.out.println(st1 == st3);
System.out.println(st2 == st3);
System.out.println(st1.hashCode());
System.out.println(st2.hashCode()); 
System.out.println(st3.hashCode());
}
}

输入:deep(master*(LanguagePackageInJava$javac讲义3.java
输出:deep(master*(Lang语文包InJava$java测试
true
false
false
79855167
79855167

关于这个问题我搜索了很多。请告诉我我在思考过程中哪里错了。

hashcode和equals方法有约定,所以如果equals的两个字符串为true,那么它们的hashcode应该相同。

最新更新