java除了八个原始数据,一切皆是对象。Integer是int对应的包装类,它有个int类型的字段存储数据,并提供基本操作。
自动拆装箱
自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。
自动拆装箱是一种语法糖,语法糖可以理解为java平台为我们自动进行了一些转换,保证不同的写法在运行时等价,它们发生在编译阶段,也就是生成的字节码是一致的。
javac自动把装箱转换为Integer.valueOf(),吧拆箱替换为Integer.intValue(),调用这两个方法利用了缓存机制,这个缓存放到了Integer的常量缓存中。这个默认缓存是-128到127之间。调用的时候直接从缓存读取
这种缓存机制,其他包装类也有,比如:
Boolean:缓存了true/false对应的实例,也就是Boolean.TRUE/FALSE
Short:缓存了-128到127之间的数值
Byte:数值有限,全部被缓存
在使用过程中要优先使用基本数据类型,避免拆箱装箱。