什么是自动装箱拆箱
简单一点说:
- 装箱: 将基本类型转换为包装器类型。
- 拆箱: 将包装器类型转换为基本类型。
对于integer而言,有一个特殊的区间,范围是-128~127
- 当我们调用Integer.valueOf(int i)的时候,如果 i 的值 >= -128 且 <=127 时,会直接从这个缓存中返回一个对象,否则就new一个Integer对象。
代码演示:
Integer a = 1;
Integer b = 1;
像这样赋值,在这个区间里面,ab都是同一个对象,即 == 为true
Integer a =new Integer(1);
Integer b =new Integer(1);
如果通过new的方式,即使在区间里面, == 也为 false,不是同一个对象。
Integer a = 200;
Integer b = 200;
那么超过这个区间了,上列代码即使这样 == 也为 false
为什么呢?
-
因为将int类型的值赋值给Integer,那么就会调用 Integer.valueOf()的方法。(自动装箱)
-
看源码:
(high为 127 ,low为-128) -
传入的值如果在这个范围内,就返回Integer高速缓存里面的值,否则就new一个对象。