请考虑以下代码。 我想知道字符串池“ 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());
}
}
输入:深(主*)LanguagePackageInJava $ javac Lecture3.java
输出:深(主*)LanguagePackageInJava $ java测试
真实
错误
错误
79855167
79855167
79855167
关于这个问题,我进行了很多搜索。请告诉我我在思考过程中哪里出错了。
答案 0 :(得分:-1)
hashcode和equals方法具有合同,因此,如果两个字符串均等于true,则其哈希码应相同。