Java SE 1.5 版本及之后,开始提供自动装箱功能。
自动装箱,将基础类型“包装”成一种类型:
基本类型 --> 包装器类
如下过程可触发自动装箱过程:
Integer count = 1;
Double amount = 2.0D
从 Javadoc API 上看,包装器类提供方法,对封装的基础类型进行操作:
类型转换,如 float --> int
比较
...
值得注意的是,对于 [-128, 127] 之间的数值,自动装箱利用缓存提供内存使用效率。
即,自动装箱对于该范围的数值,得到的包装器类内存地址不变。
例如,
Integer a = 129;
Integer b = 129;
System.out.println(a == b);// output true
实践:
1、自动装箱出现在变量声明中;
2、考虑使用情景之一,需要对基础类型进行比较、类型转换等操作;
3、若需对包装器类进行 == 比较,建议转换为基础类型后,再进行。
为了避免缓存数值范围 [-128, 127] 对 == 比较结果的影响。