Java中Integer與int對比的一些坑

Integer與int類型的關係

Integer是int的包裝類,int的默認值是0,而Integer的默認值是null(咱們常常在代碼中使用的Integer.valueOf() 和xx.intValue()就是自動裝箱和拆箱的過程 ),web

須要注意的是Integer裏面默認的緩存數字是-128-127緩存

  • IntegerInteger相互比較,數據在-128-127範圍內,就會從緩存中拿去數據,比較就相等;若是不在這個範圍,就會直接新建立一個Integer對象,使用== 判斷的是兩個內存的應用地址,因此天然不相等。spa

  • Integer和int類型相比,在jdk1.5,會自動拆箱,而後比較棧內存中的數據code

int跟int比較

int數據類型,都是在棧內存中存儲,若是這個數字在棧內存中存在就會直接指向這個內存地址,若是不存在,就會從新開闢內存空間,因此int和int類型的比較,相同的值不會存在內存不等的狀況orm

八個基本數據類型不能看做對象(這點很特殊),存放在棧中。棧內操做速度快,建立銷燬很容易對象

int跟Integer比較

會自動拆箱,變成int與int對比內存

Integer跟Integer比較

上面提到Integer裏面會有緩存數字ci

  • 在-128~127的範圍內,==會相等,獲取的cache的地址it

  • 不在上述範圍內,會去new一個對象對比,直接new對象的話,確定不等於io

實戰

int a = 200;
    Integer b = 200;
    System.out.println(a == b);//會自動拆箱
    Integer c = 100;
    Integer d = 100;
    System.out.println(c == d);//在Integer緩存範圍內,對比的是值
    c = 200;
    d = 200;
    System.out.println(c == d);//超出Integer緩存範圍,對比的對象的內存地址

輸出結果:

true
true
false
相關文章
相關標籤/搜索