• 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
  • 相关阅读:
    〖Python〗-- Tornado自定义session组件
    〖Python〗-- Tornado异步非阻塞
    〖Python〗-- Tornado基础
    〖Python〗-- Flask
    〖Python〗-- 设计模式
    〖Python〗-- Celery分布式任务队列
    〖Demo〗-- CosPlayPermission
    05——wepy框架中的一些细节
    04——wepy框架搭建
    03——微信小程序官方demo讲解——page部分
  • 原文地址:https://www.cnblogs.com/davidwang/p/2871893.html
Copyright © 2020-2023  润新知