为了账号安全,请及时绑定邮箱和手机立即绑定

java 中两个 String 具有相同的 hashCode 使用 == 判断返回 false ?

java 中两个 String 具有相同的 hashCode 使用 == 判断返回 false ?

慕田峪9158850 2019-03-13 18:15:24
    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 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

看书的时候不仔细,弄清楚了;
String 重写了 hashCode 方法,其 hashCode 值是由内容决定的,而不是地址决定的

查看完整回答
反对 回复 2019-04-25
?
MYYA

TA贡献1868条经验 获得超4个赞

在java中判断String 使用 == 是判断两个对象的地址而不是hashCode。因为你这是两个 String 对象 ,因为你这两个都是使用new 的,所以使用 == 是 false。


查看完整回答
反对 回复 2019-04-25
?
浮云间

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。


查看完整回答
反对 回复 2019-04-25
?
慕的地10843

TA贡献1785条经验 获得超8个赞

==比较的是内存地址,hash和equals差不多都是从字符串的每个char得来的,每个char一样,hash一样,但是内存地址不一样


查看完整回答
反对 回复 2019-04-25
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

==判断的是两个引用变量是否指向同一个对象。当两个对象的内容一样,它们的hashcode 就是一样的,但是它们的引用是不相等的


查看完整回答
反对 回复 2019-04-25
  • 5 回答
  • 0 关注
  • 952 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信