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
  • 相关阅读:
    如何把阿里图标库的图标生成代码并应用于自己的项目
    【记事件】
    极光推送,为什么IOS有的手机一直收不到推送。
    浮点型的数据对比。
    MySQL通过show processlist查看项目的mysql写的有问题
    thinkPHP5实现简单的多图上传
    mac终端运行/终止jar包
    referer参数和addslashes()函数的骚路子
    小技巧|addslashes绕过
    团队博客七
  • 原文地址:https://www.cnblogs.com/davidwang/p/2871893.html
Copyright © 2011-2022 走看看