java 中两个 String 具有相同的 hashCode 使用 == 判断返回 false ?
高洛峰
高洛峰 2017-04-18 10:06:30
0
5
533
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(5)
刘奇

看書的時候不仔細,弄清楚了;
String 重写了 hashCode 方法,其 hashCode 值是由內容決定的,而不是地址決定的

巴扎黑

在java中判斷String 使用 == 是判斷兩個物件的位址而不是hashCode。因為你這是兩個 String 物件 ,因為你這兩個都是使用new 的,所以使用 == 是 false。

巴扎黑
  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。

大家讲道理

==比較的是記憶體位址,hash和equals差不多都是從字串的每個char得來的,每個char一樣,hash一樣,但是記憶體位址不一樣

洪涛

==判斷的是兩個引用變數是否指向同一個物件。當兩個物件的內容一樣,它們的hashcode 就是一樣的,但是它們的引用是不相等的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!