• Java装箱的 " == " 的问题


    装箱和拆箱

     packagecom.xzj.Test;
     
     /*
     * @ author thisxzj
     * @ create 2019-02-25 10:56
     */
     publicclassBase{
     publicstaticvoidmain(String[] args) {
     finalintNUM=127;
     Integeri1=NUM;
     Integeri2=Integer.valueOf(NUM);
     Integeri3=newInteger(NUM);
     
     System.out.println("i1 ==? i2 "+(i1==i2));
     System.out.println("i1 ==? i3 "+(i1==i3));
     System.out.println("i2 ==? i3 "+(i2==i3));
     
     System.out.println("i1 equals ? i2 "+(i1.equals(i2)));
     System.out.println("i1 equals ? i3 "+(i1.equals(i3)));
     System.out.println("i2 equals ? i3 "+(i2.equals(i3)));
     }
     }
     

    结果:

     i1 ==? i2 true
     i1 ==? i3 false
     i2 ==? i3 false
     i1 equals ? i2 true
     i1 equals ? i3 true
     i2 equals ? i3 true

    Integer 缓存池的大小默认为 -128~127。在int的数字在缓存的范围内的时候,可以认为直接数字装箱和valueOf是等价的。他们使用的是用一份资源。

    在超过了缓存池的范围的时候:将上面代码中NUM常量变为128

    运行的结果:

     i1 ==? i2 false
     i1 ==? i3 false
     i2 ==? i3 false
     i1 equals ? i2 true
     i1 equals ? i3 true
     i2 equals ? i3 true

    可以看到,超过了这个范围,Integer对象使用的均不是同一份资源。

    以上是Integer为例子,探索了包装类的缓存范围。

    基本类型对应的缓冲池如下:

    • boolean: true 、false

    • byte:-128 ~ 127

    • short: -128 ~ 127

    • int: -128 ~ 127

    • char:0 ~ 127 对应的char

  • 相关阅读:
    转载:如何在 ES5 环境下实现一个const
    vue-element-admin中public中json中的代码没有打包到线上
    cordova打包vue2(webpack)android、ios app
    Cordova开发App入门之创建android项目
    vuex的理解
    Vue中的computed属性
    yarn 常用命令(基于vue框架)
    npm和yarn的使用对比
    npm常用命令
    asp.net ashx一般处理程序实现async await异步操作
  • 原文地址:https://www.cnblogs.com/zjxu97/p/10429974.html
Copyright © 2020-2023  润新知