(1)Integer缓存池

在 JDK8 中,Integer 缓存池可缓存的数值范围为-128 到 127。

(2)Integer.valueOf(xxx)的valueOf分析

1. 参数为int

在申请一个 [-128,127] 内的数时,其实是从 cache 中直接取出来用的,

如果不在这个范围则是 new 了一个 Integer 对象

 

2.参数为String

关于parseInt方法:

static int parseInt(String s)   //默认转化为10进制整型

static int parseInt(String s, int radix)    //转化为radix进制整型

(3)Integer创建的两种方式

Integer a = new Integer(1);
        Integer b = new Integer(1);
        System.out.println(a==b);   //false     创建对象的方式 两个不同的内存地址


        Integer a1 = new Integer(128);
        Integer b1 = new Integer(128);
        System.out.println(a1==b1);   //false   创建对象的方式 两个不同的内存地址


        Integer c = Integer.valueOf(123);
        Integer d = Integer.valueOf(123);
        System.out.println(c==d);    //true     从常量池中取的

        Integer c1 = Integer.valueOf(128);
        Integer d1 = Integer.valueOf(128);
        System.out.println(c1==d1);  //false    超过了127  则新实例化了一个Integer类型的对象   自动装箱

(4)Integer 的拆箱和装箱

Integer i3 = 1;// 当把一个int型赋给一个Integer型时,引发编译器自动装箱,转化为Integer i3 = new Integer(1);

i4 = new Integer(1);// 由于基本类型无法指定对象,所以编译器会自动拆箱,该条语句会转换为:int i4  = new Integer(1).intvalue();

 (5)隐式/显示类型转换

 高转低    --------   显示转换

 低转高     --------   隐式转换

(6)综合及总结

int int1 = 12;
        int int2 = 12;
        Integer integer1 = new Integer(12);
        Integer integer2 = new Integer(12);
        Integer integer3 = new Integer(127);
        Integer a1 = 127;
        Integer a2 = 127;
        Integer a = 128;
        Integer b = 128;
        System.out.println("int1 == int2 -> " + (int1 == int2));    // true      整型比较
        System.out.println("int1 == integer1 -> " + (int1 == integer1));    // true     int与Integer比较
                                                                            // Integer自动拆箱   等价于第一组

        System.out.println("integer1 == integer2 -> " + (integer1 == integer2));        // false    两个对象   不会拆箱
                                                                                        //不同的内存地址

        System.out.println("integer3 == a1 -> " + (integer3 == a1));  // false          //等价于上一组
        System.out.println("a1 == a2 -> " + (a1 == a2));       // true     从常量池中直接取引用
        System.out.println("a == b -> " + (a == b));        // false       超过了127   需要new