考虑下面给出的一段代码。我想知道字符串池"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应该相同。