平常 Integer 和 int 比较 都是直接 == 的,这没有问题
但是需要注意的是当 Integer 为 null的时候 , 还是 Integer == int 的话就是报空指针了。
原因很简单,Integer和int==比较的使用,Integer会自动拆箱,调用 intValue() 方法,那null去调用方法,自然抛出空指针。
所以可以采用 Integer.valueOf(int).equals(Integer) 这样的方法来避免空指针
Integer 指的是 Integer a = 1
new Integer 指的是 Integer a = new Integer(1)
而其他需要注意的是
new Integer 和 new Integer 使用 == 永不相等 这个容易理解 内存地址不同
Integer 和 new Integer 使用 == 永不相等 也是一样 内存地址不同
但 Integer 和 Integer 则是在 -128 ~ 127 这个范围里相等 因为使用 Integer a = 1
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的最低和最高值之间(-128,127)它是会返回IntegerCache里建好在内存的Integer对象,所以其内存地址是一样的,出了这个范围,则帮你新建Integer对象,所以==不相等
而 int和Integer 或者 int和new Integer 都会是相等的(除了上面说的Integer为null)因为比较是Integer会自动拆箱,其实就是变成 int == int