Java基礎(chǔ)中Integer值用==和equal判斷相等問題

一、Integer equals()方法判斷的是兩個Integer對象值是否相等

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

二、Integer==判斷兩個對象的地址是否相等

2.1 兩個通過new Integer()的對象

    Integer a= new Integer(200);
    Integer b= new Integer(200);
    System.out.print(a==b);

輸出false
通過new 一個對象會為對象分配一個地址,不同的new會生成不同的地址

2.2 兩個通過賦值的對象

分下面兩種對象

    Integer a= 200;
    Integer b= 200;
    System.out.print(a==b);

輸出為false

        Integer a= 100;
        Integer b= 100;
        System.out.print(a==b);

輸出為true
通過賦值的生成對象會自動封箱,會經(jīng)過Integer valueOf()方法

 public static Integer valueOf(int i) {
        if (i >= -128 && i <= 127)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

可以看出在-128-127之間會取緩存池里的緩存對象,同一個值只有一個緩存對象。
所以通過賦值生成的對象會自動封箱
a 如果值為-128-127之間會取同一個地址,兩個對象相等,如果不在之間則會new 一個對象,兩個地址不相同

2.3 一個對象一個基本類型

        Integer a= 200;
        int b= 200;
        System.out.print(a==b);

輸出為true
比較時對象a會自動卸箱,相當于調(diào)用了

public int intValue() {
        return value;
    }

比較是值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容