有时,需要将基本类型转换成为对象。所以便有了包装器类型。
例如:
Integer-------------------------------------------int
Double-------------------------------------double
Float--------------------------------------------float
Short------------------------------------------short
Byte---------------------------------------------byte
Character-------------------------------------char
Boolean----------------------------------boolean
Long--------------------------------------------long
包装器类型是immutable类型的,并且还是final的,因此不能派生它们的子类。
用途:类的尖括号中的类型参数不能是基本类型,所以此时就要使用包装器类型了。
基本类型可以通过自动装箱变成包装器类型。
例如:
list.add(3);
//将自动变成
list.add(Integer.valueOf(3));
此外,当一个Integer类型对象赋给一个int值时,则会进行自动拆箱。
例如:
int n=list.get(i);
//将自动转换为
int n=list。get(i).intValue();
自动装箱和自动拆箱同样也适用于算数表达式。比如:
Integer n=3;
n++;
编译器会自动插入一条对象拆箱命令,然后执行自增运算,最后再将结果装箱。
==也适用于包装器类型,不过是判断是否指向同一个对象空间。
但要注意:
1.自动装箱规范要求boolean,byte,char要小于等于127.
2.[-128.127)之间的int和short,相同的值会被包装到相同且固定的对象中,不同的值会被包装到不同且固定的对象中。此时是调用的是valueOf方法(一般调用这个方法进行装箱)。但是当超出这个范围valueOf方法就会new一个新的对象。
3.若在一个表达式中混合使用Integer和Double类型,Integer类型会被自动拆箱,然后提升为double,再包装为Double
4.装箱和拆箱是编译器的工作,而不是虚拟机。