Integer中==踩坑记录

2019-09-10 16:42:39  卢浮宫  版权声明:本文为站长原创文章,转载请写明出处


一、背景

    今天在使用Integer的==进行数据比对时发现

    Integer i = 366;

    Integer j = 366;

    i == j  返回false


二、为什么呢

    查JDK API发现在Integer中有以下方法


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

    其中IntegerCache是定义的缓存区域,当一个Integer数值在-128 到 127之间就会放在这个缓存区中,取值也是从这里取。

    故而就有以下操作了

    Integer i = 366;
    Integer j = 366;
    i == j  返回false
    Integer m = 66;
    Integer n = 66;
    m == n  返回true


三、解决方案

    所以比较Integer还是要使用equals()




更多精彩请关注guangmuhua.com


最新评论: