自动拆箱/装箱

79

基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

package unbox;
/**
 * @author ZerototoFive
 * @create 2021-09-08-20:06
 */
public class UnboxingTest {
    public static void main(String[] args) {
        Integer integer = 2; //自动装箱
        Integer integer2 = Integer.valueOf(2);
        int i = integer;//自动拆箱
        int i2 = integer.intValue();
        System.out.println(integer);
        System.out.println(integer2);
        System.out.println(i);
        System.out.println(i2);
        System.out.println(integer == integer2);//true
        System.out.println(i == i2);//true
    }
}

new Integer(2) 与 Integer.valueOf(123) 的区别在于:

new Integer(2) 每次都会新建一个对象;
Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。

Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y); // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k); // true