1. 程式人生 > >Integer類實現方式和註意事項

Integer類實現方式和註意事項

裝箱 col 基本類 引用 big 長度 i++ length 通過

java.lang.Integer類的源代碼:

//定義一個長度為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));

Integer類實現方式和註意事項