Java 包裝類 自動裝箱和拆箱


 

包裝類(Wrapper Class)

  包裝類是針對於原生數據類型的包裝

  因為有8個原生數據類型,所以對應有8個包裝類。

  所有的包裝類(8個)都位於java.lang下。

  Java中的8個包裝類分別是:Byte, Short, Integer, Long, Float, Double, Character, Boolean,它們的使用方式都是一樣的,可以實現原生數據類型與包裝類型的雙向轉換。

  下面以主要Integer類為例說明。

 

Integer

  Integer類將int類型的值包裝到一個對象中。

  Integer通過下面這個構造方法構造相應的整型數的對象:

  public Integer(int value);

  public int intValue()方法則返回這個包裝類所包裝的整型值。

 

自動裝箱/拆箱(Autoboxing/unboxing)

  JDK5.0的一個新特性是自動裝箱和自動拆箱。

  自動裝箱/拆箱大大方便了基本類型數據和它們包裝類的使用。

  自動裝箱:基本類型自動轉為包裝類(int >> Integer)

  自動拆箱:包裝類自動轉為基本類型(Integer >> int)

 

  比如下面的例子:

import java.util.ArrayList;
import java.util.Collection;

public class BoxTest
{
    public static void main(String[] args)
    {
        Collection<Integer> c = new ArrayList<Integer>();
    
        c.add(3);//將int類型的3轉換為Integer類型並放到集合當中        
    }
}

 

緩存

  下面這個程序很奇怪:

  

public class BoxTest2
{
    public static void main(String[] args)
    {
        Integer i1 = 200;
        Integer i2 = 200;

        if (i1 == i2)
        {
            System.out.println("i1 == i2");

        }
        else
        {
            System.out.println("i1 != i2");

        }
    }

}

 

  當兩個數都是100的時候==判斷相等,當兩個數都是200的時候判斷不相等。

  查看內部實現代碼可知,Integer類有一個緩存,它會緩存-128~127之間的整數

  當調用valueOf的時候,不會生成新的對象,而是從緩存中取出對象。這樣可以提高性能。

  使用構造方法的時候肯定會生成新的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM