本人维护的一个网站发现了Bug,一段代码里面使用“==”对两个Integer对象进行比较,发现如果两者的值都在-128到127时(-128<=a,b<128),比较结果为true。但如果其中之一或者两者都不在这个范围内(<-128或>=128),比较结果为false。究其原因,原来是Java的Integer实现中,把从-128到127的值(准确的说是值在这个范围内的Integer实例)进行了缓存,所以用户直接实例化得到的都是缓存,所以"=="比较结果为true。
网上找到一下这个哥们的一篇博文,收藏供以后复习。
本文深入探讨了Java中Integer对象在特定数值区间内的缓存机制及其对==运算符比较结果的影响,解释了当数值位于-128到127之间时,即使实际创建的对象不同,比较结果也会显示为true的原因。
1083

被折叠的 条评论
为什么被折叠?



