1. 程式人生 > 其它 >【基礎篇】自動拆箱 +自動裝箱

【基礎篇】自動拆箱 +自動裝箱

技術標籤:面試題資料型別

什麼是自動裝箱拆箱

簡單一點說:

  • 裝箱: 將基本型別轉換為包裝器型別。
  • 拆箱: 將包裝器型別轉換為基本型別。

對於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一個物件。