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)); }