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

时间:2018-08-05 18:24:48

标签: java string heap hashcode string-pool

请考虑以下代码。 我想知道字符串池“ 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

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

1 个答案:

答案 0 :(得分:-1)

hashcode和equals方法具有合同,因此,如果两个字符串均等于true,则其哈希码应相同。