【基礎篇】自動拆箱 +自動裝箱
阿新 • • 發佈:2020-12-14
什麼是自動裝箱拆箱
簡單一點說:
- 裝箱: 將基本型別轉換為包裝器型別。
- 拆箱: 將包裝器型別轉換為基本型別。
對於integer而言,有一個特殊的區間,範圍是-128~127
- 當我們呼叫Integer.valueOf(int i)的時候,如果 i 的值 >= -128 且 <=127 時,會直接從這個快取中返回一個物件,否則就new一個Integer物件。
程式碼演示:
Integer a = 1;
Integer b = 1;
像這樣賦值,在這個區間裡面,ab都是同一個物件,即 == 為true
Integer a =new Integer( 1);
Integer b =new Integer(1);
如果通過new的方式,即使在區間裡面, == 也為 false,不是同一個物件。
Integer a = 200;
Integer b = 200;
那麼超過這個區間了,上列程式碼即使這樣 == 也為 false
為什麼呢?
-
因為將int型別的值賦值給Integer,那麼就會呼叫 Integer.valueOf()的方法。(自動裝箱)
-
看原始碼:
(high為 127 ,low為-128) -
傳入的值如果在這個範圍內,就返回Integer快取記憶體裡面的值,否則就new一個物件。