首頁  >  問答  >  主體

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

高洛峰高洛峰2764 天前536

全部回覆(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
  • 取消回覆