包装类是Java为每种基本数据类型(int,short,long等)提供的对象表示形式,它们将基本数据类型"包装"成对象,使得基本类型也能以对象的形式使用。由于Java是面向对象的语言,很多API和容器类只能操作对象,为了接近这个问题,Java便提供了包装类,其包含了各种实用方法(如类型转换、进制转换等),也接近了基本类型不能为null的问题。
包装类包含Byte,Short,Integer,Long,Character,Double,Boolean,Float.其构造方式有以下3种:
输出结果如下:
而其还提供转化为基本数据类型,字符串和进制转换,方式如下:
运行结果如下:
其拥有自动装箱和自动拆箱功能,即在赋值,比较和运算时会自动调用转换方法,转化为对应的基本类型。案例如下:
运行结果如下
不过其需要更大的内存,在数据量过大的情况下需要更多的性能,同时也有空指针的风险(即包装类为null,拆箱时无法转换);同时,还有一个特殊的问题,即128问题;问题如下:
输出结果为
这个是由于,Java对部分包装类实现了对象缓存优化,即Byte,Short,Integer,Long等默认缓存了-128~127,Character缓存了0~127;其目的是为了优化小整数频繁使用的问题,优化内存性能,避免频繁创建或销毁小整数对象,但是其会导致在使用==判断时,会出现超出缓存范围,导致判断出错的情况,为了避免这个问题,我们应该使用x.equals(y)方法来进行判断,或者使用intValue()方法,将比较的双方同时使用intValue(),然后再进行比较。