某些时候,主数据类型无法使用,你必须使用对象(比如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会在你需要的时候转换