Integer使用==比较的问题
-
new一个对象
public Integer(int value) { this.value = value; }
-
自动装箱
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
-
自动拆箱
public int intValue() { return value; }
总结:
- int 和 int 比较,比较的是字面量的值,使用==始终是true
- int 和 integer 比较,由于 integer 会发生自动拆箱,也是true
- integer 和 integer 比较:
- 若两个都是new出来的对象,则始终是false
- 若一个是new,一个是非new(包括字面量 || Integer.valueOf( )等),那么一个是自动装箱的对象,一个是new出来的对象,始终flase
- 两个都不是new出来的,都会发生自动装箱,就需要看值的范围,在-128-127的范围内,会获取IntegerCache里的对象,这样就是true,范围外的还是false