所谓的拆箱装箱,其实就是一个简单的语法糖。我们以Integer为?。
(一)装箱
Integer i = 1;
本质上就是:
Integer i = Integer.valueOf(1);
(二)拆箱
int m = i;
本质上就是:
int m = i.intValue();
(三)小练习
public static void main(String[] args) {Integer a = 1;Integer b = 2;Integer c = 3;Integer d = 3;Integer e = 321;Integer f = 321;Long g = 3L;// 返回true:c和d都为-128~127期间的数值,// 处于这个期间的数值会被缓存起来,// 所以c和d指向的是同一个对象。System.out.println(c == d);// 返回false:e和f分别在堆中创建了不同的对象。System.out.println(e == f);// 返回true:在算数运算时包装类型会自动拆箱,// 所以(a+b)相当于(a.intValue()+b.intValue()),// 同时()的存在并不会触发装箱,所以(a+b)的结果为基本类型,// 此时c也会被迫拆箱,所以3=3返回trueSystem.out.println(c == (a + b));// 返回true,这个不用解释System.out.println(c.equals(a + b));// 返回true,这个和上面的道理基本一样,// g也会被迫拆箱,而基本类型long和int可以直接比较数值,// 所以返回true。System.out.println(g == (a + b));// 返回false,这个主要是因为equals的内部逻辑,// 它会先判断是不是Long类型,是的话才会拆箱比较,// 否者直接返回false。System.out.println(g.equals(a + b));}