public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
int i5 = 127;
// Integer相同值的比较
System.out.println(i1 == i2);// t
System.out.println(i1 == i5);// t自动拆箱
// Integer超出127的数,是否同一对象
System.out.println(i1 == i2);// t
System.out.println(i3 == i4);// f 否
/**
* 查看Integer.valueOf()
* public static Integer valueOf(int i) {
* if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
* return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
* return new Integer(i);
* }
*
* Integer.IntegerCache.low
* static final int low = -128;
* assert IntegerCache.high >= 127;
*/
}
总结:
int是基本数据类型,Integer是int的包装类。
二者在做==运算时,Integer会自动拆箱为int类型,然后再进行比较。届时,如果两个int值相等则返回true,否则就返回false
另外,查看Integer.valueOf()源码可以看到,当在[-128,127]时,Integer不会new一个对象出来,而是指向原有的地址