1.对象包装类:
(1)不可变,即包装器一旦构造完成,其中包装的值就不允许改变。
(2)它是final的,不能定义子类。
2、自动装箱()和自动拆箱
(1) ():假设定义了一个整型数据。 由于类型参数不允许基本类型,所以需要使用包装类,如下:
ArrayList list = new ArrayList<>();
由于值被包装在对象中,因此效率比 int[] 数组低很多。 因此,该方法适合构建小型集合。 然而,有一个有用的功能可以轻松地向其中添加 int 元素,如下所示:
list.add(3);
上面的代码会自动转化为:
list.add(Integer.valueOf(3));
这种转换称为 ()。
(2)自动拆箱:将包装类对象分配给基本类型。 例如,将一个对象分配给 int 类型:
int n = list.get(0);
上面的代码将被转化为:
int n = list.get(0).intValue();
3、注意几点:
(1)自动装箱规范要求byte和char小于等于127,-128到127之间的short和int打包成固定对象。 例如,如果定义了两个对象,并且都分配了值 100,则必须建立两个对象之间的相等比较。
(2) 包装类可能为 null,自动装箱可能会抛出异常。
(3) 如果在表达式中混合使用 和 类型自动包装技术,则该值将被取消装箱、提升为,然后装箱。
(4)装箱和拆箱是编译器识别的自动包装技术,而不是虚拟机识别的。 编译器在生成类字节码时插入必要的方法调用,虚拟机只是执行这些字节码。