为什么不要使用==比较Integer?
Posted expiator
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么不要使用==比较Integer?相关的知识,希望对你有一定的参考价值。
比较Integer的时候,不要用==。
查看Integer的源码,如下:
/**
* Returns an @code Integer instance representing the specified
* @code int value. If a new @code Integer instance is not
* required, this method should generally be used in preference to
* the constructor @link #Integer(int), as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an @code int value.
* @return an @code Integer instance representing @code i.
* @since 1.5
*/
public static Integer valueOf(int i)
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
通过注释可以知道,为了更好的空间和时间性能,Integer会缓存频繁使用的数值,数值范围为-127到128,在此范围内直接返回缓存值。
IntegerCache.low 是-127,Integer.high是128,如果在这个区间内,他就会把变量i当做一个变量,放到内存中;
但如果不在这个范围内,就会去new一个Integer对象,
而如果两个Integer值都不在这个范围内,那么就会new了两个对象实例,两个对象用==比较肯定是false。
解决方法
比较Integer的值有两种方法,
1.一个是用equals()比较,但是注意要判空,避免空指针异常。
2.一个是用intValue()转成int比较。
示例如下:
Integer value1=129;
Integer value2=129;
if(value1.intValue()==value2.intValue())
// ...
参考资料:
https://blog.csdn.net/luohao_/article/details/86607686
以上是关于为什么不要使用==比较Integer?的主要内容,如果未能解决你的问题,请参考以下文章
[Java]_[初级]_[装箱和拆箱的陷阱-不要使用==进行包裹类型wrapper class比较]
Java Integer compareTo() - 为啥使用比较与减法?