Java 中integer與int的區別

平常用的不多,可是面試,筆試經常遇到的一個問題就是 int 與integer的區別,廢話不多說,我們直接上圖吧。


     
       其中答案是:true;true;false,true

其實原因很簡單:
integer是int的一個封裝類,int是一個基本數據類型,integer是一個類。
實例化Integer涉及到整型數的自動拆裝箱,在進行自動拆裝箱時,編譯器會使用Integer.valueof()來創建Integer實例
Integer.valueof()的源代碼:
public static Integer valueOf(int i) {  
      assert IntegerCache.high >= 127;  
      if (i >= IntegerCache.low && i <= IntegerCache.high)  
          return IntegerCache.cache[i + (-IntegerCache.low)];  
      return new Integer(i);  
  }  
簡單地解釋這段代碼,就是如果傳入的int在IntegerCache.low和IntegerCache.high之間(IntegerCache.low 默認是-128;IntegerCache.high默認是127)那就嘗試看前面的緩存中有沒有打過包的相同的值,如果有就直接返回(所以執行i2=127時並沒有重新創建實例,則i1和i2爲同一個實例的引用,所以輸出爲 true,true),否則就創建一個Integer實例(所以i3,i4爲兩個不同實例的引用,其中實例的值相同,所以輸出false,true)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章