• Java Integer == 以及分析


    Java Integer ==

    先看一下这段代码

    Integer integer1 = 100;
    Integer integer2 = 100;
    System.out.println("integer1 == integer2:"+(integer1==integer2));
    Integer integer3 = 1000;
    Integer integer4 = 1000;
    System.out.println("integer1 == integer2:"+(integer3==integer4));
    

    输出结果:

    很久之前就知道这里有个坑,今天看到别人分析了一下Integer.java的源代码才知道具体是为什么

    Integer.java

    可以看出来使用Integer.valueOf(i)的时候并不会立即new一个Integer对象,而是先判断是否在缓存数组里面

    不知道称作缓存是不是不太合适

    IntegerCache是一个嵌套类(静态内部类)

    在静态初始化块中完成的初始化,在这里确定的范围是-128~127

    包装器获取的时候会调用 Integer.valueOf(i)

    Java核心技术里面有提到,之前一直也没注意

    所以直接new 创建一个Integer 使用==比较还是会false

    Integer integer = new Integer(100);
    System.out.println("integer1 == integer2:"+(integer1==integer));
    

    integer1 == integer2:false

    为了以后避免这种坑,还是使用 equals比较好

    当然,要判断 == null

    以后遇到问题还是多看一下源码比较好

  • 相关阅读:
    BZOJ 3522 Hotel
    BZOJ 1864 三色二叉树
    396595
    CodeForces
    CodeForces
    CodeForces
    E. 数字串
    算术基本定理总结
    Cyclic Nacklace 杭电3746
    Period
  • 原文地址:https://www.cnblogs.com/stdpain/p/10656824.html
Copyright © 2020-2023  润新知