Integer == 問題

Integer 127 == Integer 127【返回true】
Integer 128 == Integer 128【返回false】
為啥會這樣?

image.png

簡介:

Java基本類型,boolean、byte、char、short、int、float、long、double,基礎數(shù)據(jù)類型進行了對象封裝,在使用時可以自動的封箱和拆箱;

Integer是java基本類型之一,在==比較時會進行自動拆箱與封箱:

  • 當Integer與int值比較時,會將Integer進行自動拆箱,intValue(),與int是常量比較;
  • 當兩個Integer進行比較時,分三種情況:
    1)new Integer與new Integer進行比較,則為常規(guī)對象比較,返回false;
    2)Integer num = ?與new Integer進行比較,Integer num = ?會創(chuàng)建新對象,與new Integer進行比較為常規(guī)對象比較,返回false;
    3)Integer num = ?與Integer num = ?進行比較,需要注意下Integer在自動封箱valueOf(int i)時,會對-128~127的值對象進行緩存,在這個范圍內為true,超出這個范圍則為兩個對象,為false。
public static Integer valueOf(int i) {
  if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
}

舉例說明:

public static void main(String[] args) {
        int n1 = 127;//常量池中數(shù)值
        Integer n2 = new Integer(127);
        Integer n2_ = new Integer(127);
        System.out.println(n2 == n2_);//false 對象比較,返回fasle
        Integer n3 = 127;
        System.out.println(n1 == n2);//true 與int比較,n2自動拆箱intValue(),與int是常量比較
        System.out.println(n1 == n3);//true 與int比較,n3自動拆箱intValue(),與int是常量比較
        System.out.println(n2 == n3);//false 對象比較,n3自動封箱valueOf(int i),返回的是自動封箱里面創(chuàng)建的對象;n2則是手動創(chuàng)建的對象,兩個引用不一樣,為false
        Integer n4 = 127;
        Integer n5 = 128;
        Integer n6 = 128;
        System.out.println(n4 == n3);//true n4,n3自動封箱值為valueOf(int i),Integer自動封箱會緩存-128~127對象,緩存對象比較為true;
        System.out.println(n5 == n6);//false n5,n6自動封箱值為valueOf(int i),Integer自動封箱超過Integer自動封箱緩存-128~127范圍,為不同的對象;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容