Integer類實現方式和註意事項
阿新 • • 發佈:2018-07-09
裝箱 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類實現方式和註意事項