1、Integer类实例变量与int类型数据进行==比较的时候,如果值是相等的,那么将返回true;因为在比较的时候,Integer会自动拆箱为int类型。
Integer num1 = new Integer(17); int num2 = 17; System.out.print(num1 == num2);
2、new出来的Integer类对象与自动装箱得到的Integer类对象,即便是值一样,在进行==比较时返回的是false;因为自动装箱得到的Integer类对象指向的是Java常量池中的对象,而new出来的Integer类对象指向堆内存中的地址。
Integer num1 = new Integer(17); Integer num2 = 17; System.out.print(num1 == num2);
3、自动装箱得到的Integer类对象,在值范围为-128—127之间的时候,值相等返回的是true;超出此范围,即使值相等也是false。首先,在编辑时,Integer i = 17会翻译为Integer i = Integer.valueOf(17);valueOf()方法的源码实现如下:
public static Integer valueOf(int i){ assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high){ return IntegerCache.cache[i + (-IntegerCache.low)]; } return new Integer(i); }
也就是说该方法将始终缓存-128到127范围内的值,只会在超出缓存范围值时才会new一个新的Integer类对象。