搜索

首页  >  问答  >  正文

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

高洛峰高洛峰2766 天前540

全部回复(5)我来回复

  • 怪我咯

    怪我咯2017-04-18 10:08:30

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

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:08:30

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

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:08:30

    1. hashCode 和 == 是不一样的。 ==比较的是内存地址, 而hashCode是根据实例变量计算出来的。

    2. 你使用了new创建了两个String实例(new 关键字是会开辟新内存空间的),而不是直接引用string池中的“hello”,下面是此构造器的源代码。

      public String(String original) {
         this.value = original.value;
         this.hash = original.hash;
      }

      而String的hash计算方法是根据上述代码中的value和hash。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:08:30

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

    回复
    0
  • PHP中文网

    PHP中文网2017-04-18 10:08:30

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

    回复
    0
  • 取消回复