装箱
拆箱
将包装类型转换为基本数据类型;
public class BoxTest {/***装箱(基本数据类型转为包装类型)*/private Integer i = 1;private Integer j = 2;/***拆箱(包装类型转为基本数据类型)*/private int m = i;private int n = j;}
对于java的自动装箱和拆箱,我们看看源码编译后的class文件,其实装箱调用包装类的valueOf方法,拆箱调用的是xxxValue方法,下面就是变编译后的代码:
Java中的八种基本类型对应的包装类型的自动装箱和拆箱,每种包装类型都定义了2个方法valueOf装箱方法和xxxValue拆箱方法。
public class BoxTest {/***装箱(基本数据类型转为包装类型)*/private Integer integer = 1;private Boolean aBoolean = true;private Float aFloat = 1.00f;private Double aDouble = 1.00D;private Character character = 'c';private Long aLong = 1000L;private Byte aByte = 1;private Short aShort = 1;/***拆箱(包装类型转为基本数据类型)*/private int inta = integer;private boolean booleana = aBoolean;private float floata = aFloat;private double doublea = aDouble;private char chara = character;private long longa = aLong;private byte bytea = aByte;private short shorta = aShort;}
何时装箱和拆箱?
上面说过赋值时会自动装箱和拆箱,还有其他情况:
- 进行=赋值操作(装箱和拆箱)
- 进行+,-,*,/混合运算(拆**箱**)
- 进行>,<,==比较运算(拆箱)
- 调用equals进行比较(装箱)
- 方法调用时(装箱或者拆箱)
- ArrayList,HashMap等集合类,添加基础类型数据时(装箱)
