参考文章:

深入剖析Java中的装箱和拆箱 - Matrix海子

java为每种基本数据类型提供了对应的包装器类型

使用包装器的原因:

可以将基本类型当做对象处理(带泛型的ArrayList只能传入对象),将基本类型包装成对象后,扩大了基本类型的操作。

可以将某些基本方法放在包装器中。

自动装箱:自动将基本类型转换为包装器类型

【java核心卷笔记】自动装箱与拆箱_基本类型

 

【java核心卷笔记】自动装箱与拆箱_开发语言_02

 自动拆箱:自动将包装器类型转化为基本数据类型

当将一个包装器对象赋给基本类型时,会自动拆箱。

【java核心卷笔记】自动装箱与拆箱_执行效率_03

 

【java核心卷笔记】自动装箱与拆箱_执行效率_04

总结:装箱过程是通过调用包装器的vauleOf方法实现的,而拆箱过程是通过调用包装器的xxxVaule方法实现的


包装器类是不可变的,一旦构造了包装器,就不能更改包装在其中的值。

【java核心卷笔记】自动装箱与拆箱_开发语言_05

包装类对象的==:

【java核心卷笔记】自动装箱与拆箱_java_06

【java核心卷笔记】自动装箱与拆箱_基本类型_07

【java核心卷笔记】自动装箱与拆箱_开发语言_08

 

【java核心卷笔记】自动装箱与拆箱_浮点_09

 包装器的==比较的是内存地址,但是介于-128和127之间的short和int被包装到固定的对象中。但是浮点类型不能被包装到固定对象,因为浮点类型时有无数个。

【java核心卷笔记】自动装箱与拆箱_基本类型_10

【java核心卷笔记】自动装箱与拆箱_浮点_11

【java核心卷笔记】自动装箱与拆箱_浮点_12

 

从这段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便

返回指向IntegerCache.cache中已经存在的对象引用,否则创建一个新的Integer对象


 题目:

●谈谈Integer i=new Integer(xxx)和Integer i=xxx;这两种方式的区别:

(1)第一种不会触发自动装箱的过程,第二种会

(2)在执行效率和资源占用上的区别。第二种的执行效率和资源占用一般性情况下要优于第一种情况。

 ●

【java核心卷笔记】自动装箱与拆箱_java_13