zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Hrbust-1492 盒子(二分图最大匹配)
    数据结构——二叉树的建立和遍历(递归建树&层序遍历建树)
    HDU 1710 二叉树遍历
    HDU 2891
    HDU 2895 贪心 还是 大水题
    POJ 2896 另解暴力
    POJ 2896 AC自动机 or 暴力
    HDU 1714 math
    POJ 1328 贪心
    POJ 2109 巧妙解法
  • 原文地址:https://www.cnblogs.com/zjxu97/p/10429974.html
Copyright © 2011-2022 走看看