Java中的装箱和拆箱以及经典的面试题:1.三元运行符是一个整体,精度自动转换,if_else是单独的。2.自动装箱和拆箱的底层源码

1.在JDK1.5之前是手动装箱和手动拆箱的

        手动装箱的2种实现方式

                (1)Integer.valueOf(n)

                (2)new Integer(n)

        手动拆箱的实现方法integer.intValue()

2.在JDK1.5以后(包含1.5)是自动装箱和自动拆箱的

        自动装箱的实现方式:Integer integer = m

        自动装箱的实现方式:m = integer

public class IntegerClass {
    public static void main(String[] args) {
        //在JDK1.5之前是手动装箱和手动拆箱的
        //手动装箱的两种实现方式
        int n1 = 1;
        Integer integer1 = Integer.valueOf(n1);//若n1在-128~127之间,则不是通过new Integer(i)
        /*
            valueOf()的源码:
            public static Integer valueOf(int i) {
                if (i >= IntegerCache.low && i <= IntegerCache.high)//其中low为-128,high为127
                    return IntegerCache.cache[i + (-IntegerCache.low)];
                return new Integer(i);
            }
         */
        Integer integer2 = new Integer(n1);
        //手动拆箱的实现方法
        int n2 = integer1.intValue();
        /*
            Integer的构造器之一:
            public Integer(int value) {
                this.value = value;
            }
        */


        //在JDK1.5以后(包含1.5)是自动装箱和自动拆箱的
        //手动装箱的实现方式
        int m1 = 1;
        Integer integer3 = m1;//底层调用的是Integer.valueOf(m1)
        m1 = integer3;//底层调用的是integer3.intValue()

    }
}

经典面试题1:

代码:

public class Interview1 {
    public static void main(String[] args) {
        Object object = true? new Integer(1):new Double(2.0);
        System.out.println(object);//1.0三元运行符是一个整体,精度自动转换

        Object object1;
        if(true){
            System.out.println(new Integer(1));//输出1,if_else是单独的
        }else {
            System.out.println(new Double(2.0));
        }
    }
}

注:三元运行符是一个整体,精度自动转换。if_else是单独的

经典面试题2:

代码:

public class Interview2 {
    public static void main(String[] args) {
        Integer n1 = new Integer(1);
        Integer n2 = new Integer(1);
        System.out.println(n1 == n2);//false,因为这边是n1和n2是new出来的对象

        Integer n3 = 1;
        Integer n4 = 1;
        System.out.println(n3 == n4);//true,因为底层是Integer.valueOf(1),1在-128~127之间之间,返回的数组中的元素,并不是new的

        Integer n5 = 128;
        Integer n6 = 128;
        System.out.println(n5 == n6);//false,因为底层是Integer.valueOf(1),1不在-128~127之间之间,是new的
    }
}

你可能感兴趣的:(java,开发语言)