【发布时间】:2019-01-12 19:03:01
【问题描述】:
考虑下面给出的一段代码。 我想知道字符串池“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 Lecture3.java
输出: deep (master *) LanguagePackageInJava $ java Test
真的
假
假
79855167
79855167
79855167
我已经搜索了很多关于这个问题的信息。请告诉我我在思考过程中哪里错了。
【问题讨论】:
-
String.hashCode()被覆盖以返回相等字符串的相等哈希码。如果您想查看默认值,请使用System.hashCode()。 -
在池中与字符串的 hashCode 有什么关系?唯一重要的是它包含的字符及其顺序。
-
您说您搜索过,但您是否阅读过String API?它准确地说明了 hashCode 是如何计算的。
-
谢谢你,我得到了答案......在查看了字符串 api 之后
-
@shmosel: ITYM
System.identityHashCode(Object)
标签: java string heap-memory hashcode string-pool