Java中的自动装拆箱是什么?
# Java中的自动装拆箱是什么?
# 一、什么是自动拆装箱?
- 装箱:将基本数据类型转换为包装类型;
- 拆箱:将包装类型转换为基本数据类型;
示例一:
Integer a = 10; //装箱 `Integer a = 10` 等价于 `Integer a = Integer.valueOf(10)`
int b = a; //拆箱 `int b = a` 等价于 `int b = a.intValue()`;
1
2
2
示例二:
Integer a = 10;
int b = 10;
System.out.println(a == b);//true 会自动拆箱,因此可以直接判断是否相等,不需要用 equal
1
2
3
2
3
示例三:
Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
System.out.println("i1=i2 " + (i1 == i2));//true
System.out.println("i1=i2+i3 " + (i1 == i2 + i3));//true
System.out.println("i1=i4 " + (i1 == i4));//false
System.out.println("i4=i5 " + (i4 == i5));//false
System.out.println("i4=i5+i6 " + (i4 == i5 + i6));//true
System.out.println("40=i5+i6 " + (40 == i5 + i6));//true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
语句 i4 == i5 + i6,因为+这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。 然后 Integer 对象无法与数值进行直接比较,所以 i4 自动拆箱转为 int 值 40,最终这条语句转为 40 == 40 进行数值比较。
从字节码中,我们发现装箱其实就是调用了 包装类的valueOf()
方法,拆箱其实就是调用了 xxxValue()
方法。
注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。