1. 程式人生 > >int和Integer的簡單比較

int和Integer的簡單比較

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的包裝類