比較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。ide
比較Integer的值有兩種方法,
1.一個是用equals()比較,可是注意要判空,避免空指針異常。
2.一個是用intValue()轉成int比較。
示例以下:性能
Integer value1=129; Integer value2=129; if(value1.intValue()==value2.intValue()){ // ... }
參考資料:
https://blog.csdn.net/luohao_/article/details/86607686ui