当想以对象方式来处理primitive主数据类型时,就把它包装起来,Java 5.0之前的版本,无法直接把primitive主数据类型放进ArrayList或Hash-Map。
每一个primiti主数据类型都有个包装用的类,且因为这些包装类都在java.lang这个包中。所以无需去import他们。对应的包装类的名称都是依照所包装的类型设定的,只是将其第一个字母改成大写即可。
包装类有:Boolean Character Byte Short Integer Long Float Double
包装值:
int i = 288;
//传入primitive主数据类型给包装类的构造函数
Integer iWrap = new Integer(i);
解开包装:
//所有的包装类都有类似这样的方法
int unWrappped = iWrap.intValue();
primitive int 的 ArrayList
无autoboxing:
public void do NumbsOldWay(){
//创建出ArrayList对象
ArrayList listOfNumbers = new ArrayList();
//不能直接加入primitive的3,得转化为Integer
listOfNumbers.add(new Integer(3));
//返回object类型,但你可以将object转换为Integer
Integer one = (Integer) listOfNumbers.get(0);
//最后再取出primitive
int intOne = one.intvalue();
有autoboxing
public void doNumsNewWay(){
//创建Integer类型的ArrayList
ArrayList<Integer> listOfNumbers = new ArrayList<Integer>;
listOfNumbers.add(3);
//编译器自动解开Integer对象的包装,因此可以直接赋值给int
int num = listOfNumbers.get(0);
}
autoboxing的用处
1,方法的参数
参数是某种包装类型,传入相对应的primitive主数据类型
void takeNumber(Integer i){}
2,返回值
method声明为返回某种primitive主数据类型,返回兼容的primitive主数据类型或者该primitive主数据类型的包装类型。
int giveNumber() {
return x;
}
3,boolean的表达式
任何预期boolean值的位置都可以用求出boolean的表达式来代替
if(bool){
System.out.println("true");
}
4,数值运算
可以在使用primitive主数据类型作为运算子的操作中以包装类型来替换
Integer i = new Integer(42);
i++;
Integer j = new Integer(24);
Integer k = i + j;
5,赋值
将包装类型或primitive主数据类型赋给声明成相对应的包装或primitive主数据类型
Double d = x;
6,包装类型转换
常用为将对应的String类型的字符串数字转换成对应的数值
String s = "2";
int x = Integer.parseInt(s)
double d = Double.parseDouble("420.24");
//bool类型不同
boolean b = new Boolean("true").booleanValue();
7,将primitive主数据值转换成String
将数值转换成String
double d = 4.25;
String doubleString = " " + d ;
double d = 42.5;
String doubleString = Double.toString(d);