某些时候,主数据类型无法使用,你必须使用对象(比如ArrayList)所以需要装箱操作。
并且Java5后有autoboxing(自动装箱)为方便人们。
在无autoboxing
public
void
doNumsOldWay(){
ArrayList
listOfNumbers
=
new
ArrayList
();
//定义ArrayList不指定类型的表
listOfNumbers
.add(
new
Integer(3));
//加入Integer类型并为装箱传入数据3
Integer
one
= (Integer)
listOfNumbers
.get(0);
//因为没有泛型的概念所以ArrayList传回的类型是Object需要强转
int
One
=
one
.intValue();
//利用 Integer的方法取出值
}
有autoboxing
public
void
doNumsOldWay(){
ArrayList<Integer>
listOfNumbers
=
new
ArrayList<>();
//定义ArrayList不指定类型的表
listOfNumbers
.add(3);
//直接传入3,编译器会为我们自动装箱
int
num
=
listOfNumbers
.get(0) ;
//泛型的存在,无需转换类型直接取出Integer并且编译器自动拆箱
}
注意你还是不能ArrayList<int>必须是类或接口类
autoboxing的便捷
方法的参数
参数是包装类型,你可以传入类或数据类型
void
takeNumber(Integer
i
){};//可以传入Intrger或int
返回值
int
giveNumber(){
return
x
;
}
x可以是int也可以是Integer
boolean表达式
if(bool){};
bool可以是Boolean对象或biilean
赋值
可以将包装类型或数据类型赋值给对应的数据类型或值类型
Double d = x;//x可以是Integer对象或int
数值运算
可以在使用primitive主数据作为运算子的操作用包装类型来替换
Integer
i
=
new
Integer(42);
i
++
;
也可以
Integer
j
=
new
Integer(5);
Integer k = j + 5;
也就是autoboxing会在你需要的时候转换