自动装箱与自动拆箱给我们开发提供了很多的便利,在jdk 1.5中,自动装箱首次被引入。而在jdk 1.5之前,如果你想要定义一个value为100的Integer对象,则需要通过new出来。
断点跟踪
为了能够了解,自动装箱与自动拆箱的过程,我们打上断点一步步跟踪看看自动装箱的过程。
自动装箱
接下来抬到了Integer的valueOf(int i)方法,当然我这里设置的数是在==[-128,127]==之中,一会在对范围之外的数据进行跟踪。
下一步,
紧接着我们继续执行,之后就跳出了该方法
于是通过跟踪代码的执行过程可以发现Integer的自动装箱是通过valueOf来执行的。
接下来,在来看看范围之外的数据的封装有什么变化
进入下一步可以看到依然是进入了valueOf方法,主意这个天剑i >= IntegerCache.low && i <= IntegerCache.high,意思是i>=-128&&i<=127
下一步,这里因为输入的数据是大于127,所以直接创建了一个对象,并把他返回
继续下一步,跳到了构造方法之中,也就是说此时对象已经被创建,现在在进行的就是对象的赋初值。
结论:
自动装箱就是jdk自己自动帮我们完成了Integer.valueOf()方法的调用
自动拆箱
打断点
下一步,跳入了intValue()方法。
再下一步,
继续将i赋值为128也会得到相同的结果
结论
自动拆箱就是jdk自动帮我们调用了IntValue()方法
i赋值为128也会得到相同的结果