「Integer是int的包裝類,int的默認值是0,而Integer的默認值是null(咱們常常在代碼中使用的Integer.valueOf() 和xx.intValue()就是自動裝箱和拆箱的過程 ),web
須要注意的是Integer裏面默認的緩存數字是-128-127,緩存
Integer
與Integer
相互比較,數據在-128
-127
範圍內,就會從緩存中拿去數據,比較就相等;若是不在這個範圍,就會直接新建立一個Integer對象,使用== 判斷的是兩個內存的應用地址,因此天然不相等。spa
Intege
r和int
類型相比,在jdk1.5,會自動拆箱,而後比較棧內存中的數據code
int數據類型,都是在棧內存中存儲,若是這個數字在棧內存中存在就會直接指向這個內存地址,若是不存在,就會從新開闢內存空間,因此int和int類型的比較,相同的值不會存在內存不等的狀況orm
八個基本數據類型不能看做對象(這點很特殊),存放在棧中。棧內操做速度快,建立銷燬很容易對象
會自動拆箱,變成int與int對比內存
上面提到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