装箱
拆箱
将包装类型转换为基本数据类型;
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等集合类,添加基础类型数据时(装箱)