自动拆箱和自动装箱

这里写图片描述

自动装箱和自动拆箱

Integer i1 = 1; //自动装箱,实际上执行了Integer.valueOf(1)
int i2 = i1; //自动拆箱,实际上执行了 int i2 = i1.intValue();

-128~127 的数

Integer i1 = 200;
Integer i2 = 200;
System.out.println("i1 == i2: " + (i1 == i2));
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3 == i4: " + (i3 == i4));

输出的结果是:

i1 == i2: false
i3 == i4: true

int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:

public static Integer valueOf(int i) {
    if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
        return IntegerCache.cache[i + 128];
    else
        return new Integer(i);
}

对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)

所以范例中,i3 与 i4实际上是指向同一个对象。

而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。

    Integer i3 = new Integer(100);
    Integer i4 = new Integer(100);
    System.out.println("i3 == i4: " + (i3 == i4)); //false
int i = 10;
Double d = 20.0; //自动装箱 Double.valueOf(20.0D) 
System.out.println(i+d); //自动拆箱 i + d.doubleValue()
Integer i = 10; //自动装箱 Integer.valueOf(10);
Double d = 20.0; //自动装箱 Double.valueOf(20.0D);
System.out.println(i+d); //自动拆箱 i.intValue() + d.doubleValue()

猜你喜欢

转载自blog.csdn.net/qq_39981500/article/details/78820829