java 类型系统包括两个部分:基本类型、引用类型
- 每一个基本类型都有一个引用类型与之对应,称为装箱基本类型
基本类型和装箱类型三个主要区别
- 基本类型只有值,装箱类型却有和他们值不同的同一性
- 基本类型只有功能完备的值,装箱类型都有非功能值:null
- 基本类型比装箱类型更加节省时间和空间
考虑这个比较器
- 能通过很多的测试
- 但是,测试 naturalOrder.compare(new Integer(42),new Integer(42))==1(正确结果应该是0)
原因分析
- first< second 会导致自动拆箱
- first == second 不会自动拆箱,而是两个对象引用的比较,答案肯定是否定的
修正上述程序
- 俩基本类型的局部变量
考虑下述程序
- 装箱类型和基本类型比较时,装箱类型会自动拆箱,初始值是null
- null 自动拆箱 抛空指针异常
频繁装箱拆箱导致性能明显下降
使用装箱基本类型的几个合理的地方
- 集合中的元素键值
- 参数化类型中,必须使用装箱类型 ,如 ThreadLocal<Integer>
- 反射的方法调用必须使用装箱类型
总结:
- 可以选择的情况下,基本类型优于装箱类型
- 基本类型更加简单更加快速
- 特别注意 在做 == 运算时,装箱类型比较的是二者的引用对象
- 自动装箱,导致高开销和对象创建