Integer類實現方式和注意事項

java.lang.Integer類的源代碼:java

//定義一個長度爲256的Integer數組
static final Integer[] cache = new Integer[-(-128) + 127 + 1];
static {
      //執行初始化,建立-128到127的Integer實例,並放入cache數組中
      for(int i = 0; i < cache.length; i++) {
            cache[i] = new Integer(i - 128);
      }      
}

從上面代碼能夠看出,系統把一個-128~127之間的整數自動裝箱成Integer實例,並放入了一個名爲cache的數組中緩存氣力啊。若是之後把一個-128~127之間的整數自動裝箱成一個Integer實例時,其實是直接指向對應的數組元素,所以-128~127直接的同一個整數自動裝箱成Integer實例時,永遠都是引用cache數組的同一個數組元素,因此他們所有相等;但每次把一個再也不-128~127範圍內的整數自動裝箱成Integer實例時,系統老是從新建立一個Integer實例,因此會出現下面代碼的運行結果:數組

//經過自動裝箱,容許把基本類型值賦值給包裝類實例
Integer ina = 2;
Integer inb = 2;//輸出true
System.out.println("兩個2自動裝箱後是否相等:" + (ina == inb));

Integer biga = 128;
Integer bigb = 128;
//輸出false
System.out.println("兩個128自動裝箱後是否相等:" + (biga == bigb));

 Java7曾強了包裝類的功能,爲全部的包裝類都提供了一個靜態的compare(xxx val1, xxx val2)方法,這樣開發者就能夠經過包裝類提供的campare(xxx val1, xxx val2)方法來比較兩個基本類型值的大小,包括比較兩個博哦了安類型值,兩個boolean類型值進行比較時,ture>false。緩存

相關文章
相關標籤/搜索