integer==与equals()结果不同
1、问题
代码运行一段时间后发现功能异常,不按预期的逻辑执行。
代码大概如下:
查找模板编码是xxxx的所有模板,比较最新的版本号,是不是正确的。模板版本号,是从1开始,每编辑一次加1。 正常情况,max(bbh)和mbList的size是相等的、
List<Mb> mblist = xxDao.find("mbbm=xxxx")
Integer zxbbh = 查询最新版本号
if( zxbbh==mblist.size){
//dosomething
}
2、问题原因
(1)在测试环境怎么样都复现不了问题。后来把生成环境数据表复制出来,重现了问题。
多次编辑模板,达到100多次,问题出现
(2)integer的源码
Integer 在范围 -128 到127之间,数据初始化走的缓存,大了127就是new
public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i); }
(3)结论:integer比较要用equals()