JAVA中Integer的缓存机制

Integer的缓存机制: Integer是对小数据(-128~127)是有缓存的,再jvm初始化的时候,数据-128~127之间的数字便被缓存到了本地内存中,如果初始化-128~127之间的数字,会直接从内存中取出,不需要新建一个对象.

public static void main(String[] args) {

    Integer num1 = new Integer(100);
    Integer num2 = new Integer(100);
    System.out.println("num1==num2 " + (num1 == num2));     

    Integer num3 = 100;
    Integer num4 = 100;
    System.out.println("num3==num4 " +(num3 == num4));

    Integer num5 = 128;
    Integer num6 = 128;
    System.out.println("num5==num6 " + (num5 == num6));     

    Integer num7 = 100;
    Integer num8 = new Integer(100);
    System.out.println("num7==num8 " + (num7 == num8));     

    int num9 = 100;
    Integer num10 = new Integer(100);
    Integer num11 = 100;
    System.out.println("num9==num10 " + (num9 == num10));
    System.out.println("num9==num11 " + (num9 == num11));
}


//运行之后的输出结果是:

//num1==num2  false
//num3==num4  true
//num5==num6  false
//num7==num8  false
//num9==num10 true
//num9==num11 true
  • num1==num2 false
    num1和num2的内存地址不一样,==的左右操作数如果是对象的话,那么比较的是引用的地址,new产生的对象一定是新的内存地址,所以,这里和Integer的缓存机制无关的,最终的结果便是false

  • num3==num4 true
    num3和num4的初始化方式,直接将数字赋值,等价于下面:

Integer num3 = Integer.valueOf(100);

Integer的缓存机制: Integer是对小数据(-128~127)是有缓存的,再jvm初始化的时候,数据-128~127之间的数字便被缓存到了本地内存中,如果初始化-128~127之间的数字,会直接从内存中取出,不需要新建一个对象.
所以,num3和num4实际上是引用的是一个内存地址,那么就是true了。

  • num5==num6 false
    同上解析,128已经不在-128~127之间了,所以会new新对象,那么就是false

  • num7==num8 false
    因为num8是new出来的,所以使用的内存地址和num7不一致,结果为false

  • num9==num10 true
    num9的类型是int。Integer是int的包装类,在和int做比较的时候,会自动拆箱成int数值类型,所以,这里便变成了数字(int)的比较。

  • num9==num11 true
    看清,num9 和 num11 .原理同上

参考:
https://www.dutycode.com/xijie_baozhuanglei_huancun_jizhi_integer_huancun.html

猜你喜欢

转载自blog.csdn.net/quanaianzj/article/details/82383393