在java中,除去基本类型外,所有的类型都是对象,包括对象数组以及基本类型数组。在某些情况下,我们需要将基本类型转化为对象。
java为基本类型提供了包装器类:Integer、Long、Float、Short、Double、Byte、Character、Boolean。
自动装箱:编译器自动将基本类型转化为其对应的包装类
自动拆箱:编译器自动将包装类转化为其对应的基本类型
自动装拆箱的操作是由编译器而非虚拟机完成的
通常情况下:
Integer a=1000;
Integer b=1000;
if(a==b) //aways false
这是因为a和b均是包装器类对象,==比较的是两者所引用的对象的地址
但是
自动装箱规范要求char<=127、boolean、byte,以及介于-128到127之间的short和int被包装到固定对象中
于是
Integer a=127;
Integer b=127;
if(a==b) //aways true
此外,要注意的是,包装器对象所包装的值是不可变的(类似java字符串),更改所包装的值只会重新创建一个包装器对象。
因此,无法通过设置方法参数为包装器类型,来改变传入参数的值
public static void triple(Integer x) //无法改变传入的x的值
{
......
}
若确实需要改变传入的基本类型参数,可使用org.omg.CORBA包中定义的基本类型的持有者类,如IntHolder等等,每个持有者类型均有一个公有字段value