Java 裝箱和拆箱

一、裝箱機制緩存

  基礎類型引用到其包裝類型,這樣就能夠調用其各類方法。code

  例如,咱們聲明:對象

  Integer a = 1;編譯器

  其在編譯過程當中會自動解釋成:源碼

  Integer a = Integer.valueOf(1);編譯

  這就是自動裝箱的過程。class

二、拆箱機制基礎

  與裝箱相反,將引用類型簡化爲基礎類型。語法

  例如咱們在進行比較時:引用

  Integer a = 1;

  System.out.println(a == 1);  // 2

  2在編譯中會將Integer類型的a自動拆箱,解釋爲:

  int a = new Integer(1);

  而後再去與1進行對比。

注意:自動裝箱和拆箱是由編譯器來完成的,編譯器會在編譯期根據語法決定是否進行裝箱和拆箱動做。

三、緩存機制

    1. Integer i1 = 100;

    2. Integer i2 = 100;

    3. Integer i3 = 200;

    4. Integer i4 = 200;

    5. System.out.println(i1 == i2);    

    6. System.out.println(i3 == i4); 

  最後的運行結果 分別是  true 和  false!

  既然 Integer聲明時會被自動裝箱爲Integer.valueOf(int i)的方法,咱們能夠看看Integer源碼。

  發現當 i 的值在-128到127之間時會直接返回內部緩存池中已經存在對象的引用,而這個範圍就叫作自動裝箱池,而當參數是其範圍以外時則會新建對象並返回對象,這樣就能解釋以上的結果了。

  一樣的,能夠看看其它的封裝類會是什麼狀況?

  對應的自動裝箱池大小以下:

  Byte,Short,Long對應的是-128~127

  Character對應的是0~127

  Float和Double沒有自動裝箱池

相關文章
相關標籤/搜索