对象包装器包括Integer、Long、Float、Double、Shout、Byte、Character、Void、Boolean。
对象包装器是final的,即不可变对象。装箱拆箱是编译器认可的,不是虚拟机,在生成字节码文件时就已经插入相应转换,再执行。
-
自动装箱
list.add(2);
将被自动转换为:
list.add(Integer.ValueOf(2));
-
自动拆箱
int i = list.get(0);
将被自动转换为:
int i = list.get(0).intValue();
-
装箱后的equals
下面返回的是false,因为==比较的是对象,装箱后表示两个不同的对象,因此需要使用equals();
Integer a = 1;
Integer b = 2;
if(a == b){
return ture;
}
return false;
-
表达式混合两种装箱类型
若表达式混合两个装箱类型,如Integer和Double,则Integer会自动拆箱,转换为double,并且自动装箱为double;
Interger a = 1;
Double b = 2.0;
System.out.println(true ? a : b); //print:1.0