Java整數緩衝區

騎著螞蟻闖世界發表於2020-12-23

在這裡插入圖片描述
=========================================================================================================================================================

Integer 資料自動裝箱拆箱遇到的個問題

問題:
請看下面 圖中
age3
age4
age5
age6
實現自動裝箱,但兩個地址比較後,一個輸出true,一個輸出false
-----------------------------------------------------------------------------------------

在這裡插入圖片描述
解答:
自動裝箱其實java底層為我們做了一些事:針對本題在你使用自動裝箱時,java底層為我們隱型呼叫了Intege.valueOf(100)如下圖:
-----------------------------------------------------------------------------------------
在這裡插入圖片描述

接下來我們去看看Integer.valueof(100)函式內部是怎樣的:

這裡看到形參i>=IntegerCache.low&&i<=IntegerCache.high那我們接著去看看IntegerCache函式
-----------------------------------------------------------------------------------------
在這裡插入圖片描述

IntegerCache函式:
我們可以看到在靜態程式碼塊中low為-128,h=127,cache[]陣列的長度為h-low+1 也就是256,下面對cache[]陣列進行從-128~127進行迴圈初始化
在這裡插入圖片描述
**總結:**因此我們自動裝箱資料的範圍在[-128,127],獲得的地址都是對應cache[]陣列元素確定的地址,超過這個資料範圍,地址就會在堆記憶體中隨機分配,因此才會出現相同int資料自動裝箱,有的地址相同,有的地址不同。

相關文章