zoukankan      html  css  js  c++  java
  • 关于Integer类型的比较,在Integer值大于127时,为何使用==结果为false

    在项目开发中,遇到了这个问题,两个ID(菜单ID)为Integer的值的比较,ID是主键自增的,前期数据量小(考虑到菜单列表不会增加到超过127个),未出现bug。

    后面项目越做越大,菜单ID增加到128时,出现了bug,断点查询得知,Integer类型的比较在值为128时,结果为false。

    其原因如下:

    Integer类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的对象,==比较的话肯定会出错!

    查看Integer类的源码:

    public static Integer valueOf(int paramInt) {
            assert (IntegerCache.high >= 127);
            if ((paramInt >= -128) && (paramInt <= IntegerCache.high))
                return IntegerCache.cache[(paramInt + 128)];
            return new Integer(paramInt);
    }
    

     

    得知解决办法如下:

    此处需使用equals比较,或者使用a.intValue() == b.intValue()。

  • 相关阅读:
    Codeforces 526D Om Nom and Necklace (KMP)
    HDU
    HDU
    Codeforces 219D
    HDU
    HDU
    POJ
    HDU
    HDU
    第二次作业
  • 原文地址:https://www.cnblogs.com/gonglihao/p/13100392.html
Copyright © 2011-2022 走看看