1. 程式人生 > >Java - 自動裝箱與拆箱詳解

Java - 自動裝箱與拆箱詳解

自動拆箱 image 實現 bubuko 自動調用 算術運算 查看 bsp sta

  1、裝箱與拆箱

  裝箱,將基本數據類型轉為包裝類型。拆箱,將包裝類型轉為基本數據類型。

        // Byte, Short, Integer, Long, Double, Float, Boolean, Character
        // 自動裝箱,將基本數據類型轉為包裝類型
        Integer i1 = 200;
        Integer i2 = 200;
        // 自動拆箱,將包裝類型轉為基本數據類型
        int i3 = i1;
        int i4 = i2;

  

2、基本數據類型與包裝類型

  技術分享圖片

  

  3、裝箱與拆箱如何實現

  裝箱的時候JVM自動調用的是Integer的valueOf(value)方法。拆箱時JVM自動調用Integer的intVlue()方法。裝箱與拆箱的實現過程即為:裝箱過程是通過調用包裝器的valueOf(value)方法實現的,而拆箱過程是通過調用包裝器的 xxxValue()方法實現的。(xxx代表對應的基本數據類型),包裝類型做算術運算時,會自動拆箱為基本數據類型再進行。

4、面試中常見的問題

4.1 整形類型

        // Byte, Short, Integer, Long, Double, Float, Boolean, Character
        
// 自動裝箱,將基本數據類型轉為包裝類型 Integer i1 = 200; Integer i2 = 200; // 自動拆箱,將包裝類型轉為基本數據類型 int i3 = 127; int i4 = 127; System.out.println(i1 == i2); System.out.println(i3 == i4);

  輸出結果:

  false

  true

  原因需要查看Integer.valueOf(int i)方法。

  

4.2 浮點類型

        Double d1 = 2.3;
        Double d2 = 2.3;
        System.out.println(d1 == d2);
        
        Double d3 = 1000.1;
        Double d4 = 1000.1;
        System.out.println(d3 == d4);

  輸出結果:

  false

  false

4.3 綜合

    public static void main(String[] args) {
        
        Integer a1 = 1;
        Integer a2 = 2;
        Long b1 = 2L;
        Long b2 = 3L;
        
        // ture
        System.out.println(b2 == (a1+a2));
        // true
        System.out.println(b2 == (a1+b1));
        // false
        System.out.println(b2.equals(a1+a2));
        // true
        System.out.println(b2.equals(a1+b1));
    }

Java - 自動裝箱與拆箱詳解