装箱与拆箱

2019-07-23  本文已影响0人  timar

1、装箱int到Integer,调用的是Integer.valueOf()

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
IntegerCache.low是-128
IntegerCache.high是127
-128到127范围内会做缓存,防止每次都产生新的对象

        Integer i1 = 127; // 会调用Integer.valueOf()
        Integer i2 = 127;
        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i1 == i2); // true
        System.out.println(i3 == i4); // false

2、涉及到运算时会发生拆箱,Integer到int,调用的是Integer.intValue()

        Integer i1 = 127;
        Integer i2 = 127;
        Integer i3 = 128;
        Integer i4 = 128;
        Integer i5 = 0;
        System.out.println(i1 == i2); // true
        System.out.println(i3 == i4); // false
        System.out.println(i1 == i2 + i5); // true
        System.out.println(i3 == i4 + i5); // true
和int做 == 比较,会拆箱成int比较大小

原谅地址:https://www.jianshu.com/p/0ce2279c5691

上一篇 下一篇

猜你喜欢

热点阅读