java装箱拆箱

所谓的拆箱装箱,其实就是一个简单的语法糖。我们以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返回true
        System.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));
    }
发布了477 篇原创文章 · 获赞 588 · 访问量 267万+

猜你喜欢

转载自blog.csdn.net/qq_15037231/article/details/97967351