int和Integer的簡單比較
阿新 • • 發佈:2019-01-01
int與Integer的區別
1、屬於四類八種基本型別中的一種,用int 宣告的變數是非物件型別,即不能在其上呼叫方法。Integer是一個類(包裝類),用Integer宣告變數其實一個物件型別(或者是一個引用型別)
2、“==”作用於基本型別時比較的是基本型別的值,作用於物件上時,比較的是物件的引用本身的值(或者物件說是物件的地址)
應用長出現的問題:將int 型別的資料和Integer型別的資料進行比較
(1)int i1=2與Integer i2=2,進行比較時,將Integer轉換成int型別進行比較,所以i1==i2// ture。
解析:Integer包裝類原始碼
public static Integer valueOf(int i){
final int offset=128;
if(i>=-128&&i<=127){
return IntegerCache.cache[i+offset];//快取
}
return new Integer(i);//新建立
}
int 型別的取值範圍[-128,127]
(2)IntegerCache快取了[-128,127]之間的Integer物件,如果引數在其之間,就返回該快取物件(地址),在[-128,127]以外的數時就會返回new Integer(i)穿件一個新的物件,所以有以下結果:
Integer i1=127;
Integer i2=127;
system.out.printf(i1==i2); //true
Integer i1=128;
Integer i2=128;
System.out.printf(i1==i2); //false
Integer是int的包裝類