Java AutoBoxing&UnBoxing 自动装箱与自动拆箱

更多 Java 基础知识方面的文章,请参见文集《Java 基础知识》


AutoBoxing 自动装箱

原理:
Integer a = 123 会自动调用 Integer a = Integer.valueOf(123)

关于 Integer.valueOf 方法:
可以看出,使用了 IntegerCache

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

当值在 -128~127 之间时,直接返回常量池中的对象。否则返回在堆中新建一个对象并返回。
例如:

public static void main(String[] args) {
    Integer i1 = 100;
    Integer i2 = 100;
    Integer i3 = 200;
    Integer i4 = 200;

    // True,因此都是常量池中的同一个对象
    System.out.println(i1 == i2);
    // False,因此是在堆中新建的两个对象
    System.out.println(i3 == i4);
}

UnBoxing 自动拆箱

public static void main(String[] args) {
    Integer i1 = 100;

    int i2 = 100;

    // 将 i1 自动拆箱为 int 100, 再和 i2 比较
    System.out.println(i1 == i2);
}

你可能感兴趣的:(Java AutoBoxing&UnBoxing 自动装箱与自动拆箱)