new Integer的兩個對象出現了相等的情況

1111

1		Integer integer = new Integer(200);
2       Integer integer2 = new Integer(200);
3       System.out.println(integer.equals(integer2)); // true
4       System.out.println(integer == integer2);  // false
  1. 第三行的問題是使用了equals方法,在底層重寫了equals的判斷方式
  2. 第四行的問題是直接使用到了 == 而, **==**在比較引用類型的時候直接比較的是兩個對象引用的地址, 那麼new出來的地址肯定是兩個不相同的地址
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

integerequals的重寫方式的源碼如下,上
源碼如圖
後序補充吧, 我還是覺得,下面這個代碼有點看不明白

return value == ((Integer)obj).intValue();

放在了常量池? 緩存池?
其他的類型應該也是一樣的情況,待實驗.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章