自动拆箱和自动装箱是jdk1.5推出的特性。
那么,什么是自动拆箱和自动装箱呢?
先看例子:
Integer i1 = new Integer(10); Integer i2 = new Integer(20); System.out.println(i1); System.out.println(i2);
这里输出的分别是对应的10和20
Integer i3 = 10; Integer i4 = 20; System.out.println(i3); System.out.println(i4);
这里输出的也是10和20
其实自动装箱,就是自动将基本数据类型转换为包装器类型,即java会自动帮我们调用valueof方法。
拆箱则是自动将包装器类型装换成基本数据类型,但要强调的是拆箱调用的是Integer的intValue方法。
那Integer i = new Integer(1)和Integer i = 1有什么区别呢?
1.第一种方法不会触发自动装箱的过程;而第二种方法会触发
2.在执行资源和资源占用上的区别。第二种方法的执行效率和资源占用在一般情况下要优于第一种情况(但要注意这并不是绝对的,因为如果刚好调用了内存里面已经存在的同一个资源的话,那么它会直接从缓存区里面拿出来,而不会去新开内存)
在这里要注意的一点就是,当装箱的值超过规定范围(-127~128)时,它不会从缓存区拿出缓存好的对象,而是要新开一个,所以会导致以下代码输出不一致的问题:
Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1==i2); //true System.out.println(i3==i4); //false
//这里i3和i4会创建两个不同的对象,因为超出范围了
原文:https://www.cnblogs.com/MyNorth/p/14547221.html