84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
看書的時候不仔細,弄清楚了;String 重写了 hashCode 方法,其 hashCode 值是由內容決定的,而不是地址決定的
String
hashCode
在java中判斷String 使用 == 是判斷兩個物件的位址而不是hashCode。因為你這是兩個 String 物件 ,因為你這兩個都是使用new 的,所以使用 == 是 false。
hashCode 和 == 是不一樣的。 ==比較的是記憶體位址, 而hashCode是根據實例變數計算出來的。
你使用了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 就是一樣的,但是它們的引用是不相等的
看書的時候不仔細,弄清楚了;
String
重写了hashCode
方法,其hashCode
值是由內容決定的,而不是地址決定的在java中判斷String 使用 == 是判斷兩個物件的位址而不是hashCode。因為你這是兩個 String 物件 ,因為你這兩個都是使用new 的,所以使用 == 是 false。
hashCode 和 == 是不一樣的。 ==比較的是記憶體位址, 而hashCode是根據實例變數計算出來的。
你使用了new創建了兩個String實例(new 關鍵字是會開闢新內存空間的),而不是直接引用string池中的“hello”,下面是此構造器的源代碼。
而String的hash計算方法是根據上述程式碼中的value和hash。
==比較的是記憶體位址,hash和equals差不多都是從字串的每個char得來的,每個char一樣,hash一樣,但是記憶體位址不一樣
==判斷的是兩個引用變數是否指向同一個物件。當兩個物件的內容一樣,它們的hashcode 就是一樣的,但是它們的引用是不相等的