zoukankan      html  css  js  c++  java
  • Short, Integer, Long缓存

            Integer intA = 127;
            Integer intB = 127;
            
            Integer intC = 128;
            Integer intD = 128;
            
            System.out.println(intA == intB); //true
            System.out.println(intC == intD); //false
    

    Integer里弄了一个缓存,对于在 -128 ~ 127 之间的数值,会直接使用该缓存里的对象

    也就是说 Integer intA = 127 或者 Integer intA = Integer.valueOf(127) ,最终 intA 得到的是Integer里的缓存对象 

    同理,intB也是获得该相同对象因此 进行 intA == intB 比较时,intA和intB引用的是同一个对象,因此就true 

    而对于128,已经超出缓存范围了,因此会生成一个新的Integer对象, intC和intD就引用不同的对象了,进行==比较,当然就false了.

     

    但是如果new Integer() 则直接创建一个新的对象, 并不会到缓存中取.

            Integer i3 = new Integer(100);
            Integer i4 = new Integer(100);
            System.out.println("i3 == i4: "+(i3 == i4)); //false

    Integer的cache是configurable的,  -Djava.lang.Integer.IntegerCache.high=1000可以改变cache的最大值, 最小值不能config固定为-128

            //java option中加入-Djava.lang.Integer.IntegerCache.high=1000
            Integer i3 = new Integer(500);
            Integer i4 = new Integer(500);
            System.out.println("i3 == i4: "+(i3 == i4)); //true

     对于Short Long也有相同的缓存, 默认的也是缓存-128 ~ 127 之间的数值, 但其缓存不可以更改最大值.

     

     

     

    封装类对象和基本数据类型==比较, 则会将封装类对象自动转成基本类型后比较,即值比较;

            Integer i4 = new Integer(5000);
            int i5 = 5000;
            System.out.println("i4 == i5: "+(i4 == i5)); //true
  • 相关阅读:
    GPRS DTU通信的本质及调试经验
    winform 控件处在中间位置
    winform 多panel编辑
    Winform 控件多闪屏问题解决方法
    int 转换 byte[] 或 byte[] 转换 int
    java 多线程(一)
    postgresql 一些操作备忘
    idea eclipse web项目
    redis 入门
    idea 版本控制
  • 原文地址:https://www.cnblogs.com/davidwang/p/2871893.html
Copyright © 2011-2022 走看看