-4

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

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 Lecture3.java
输出: deep (master *) LanguagePackageInJava $ java Test
true
false
false
79855167
79855167
79855167

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

4

1 回答 1

-1

hashcode 和 equals 方法有 contract ,所以如果两个字符串对于 equals 是真的,那么它们的 hashcode 应该是相同的。

于 2018-08-05T18:27:18.253 回答