String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); System.out.println(str1.equals(str2)); System.out.println(str1.hashCode()); System.out.println(str2.hashCode());代码如上,输出结果: false true 99162322 99162322为什么具有相同的 hashCode 返回的是 false 呢
5 回答
MYYA
TA贡献1868条经验 获得超4个赞
浮云间
TA贡献1829条经验 获得超4个赞
hashCode 和 == 是不一样的。 ==比较的是内存地址, 而hashCode是根据实例变量计算出来的。
你使用了new创建了两个String实例(new 关键字是会开辟新内存空间的),而不是直接引用string池中的“hello”,下面是此构造器的源代码。
public String(String original) {
this.value = original.value;
this.hash = original.hash;
}
而String的hash计算方法是根据上述代码中的value和hash。
添加回答
举报
0/150
提交
取消