Integer1000为什么不等一Integer1000
package com.helloworld.beforeNewJob;
public class test {
public static void main(String[] args) {
int a=100;
int b=100;
int c=1000;
int d=1000;
Integer integer1=new Integer(100);
Integer integer2=new Integer(100);
Integer integer3=new Integer(1000);
Integer integer4=new Integer(1000);
Integer integer5=100;
Integer integer6=100;
Integer integer7=1000;
Integer integer8=1000;
System.out.println(a==b);
System.out.println(c==d);
System.out.println(integer1==integer2);
System.out.println(integer3==integer4);
System.out.println(integer5==integer6);
System.out.println(integer7==integer8);
}
}
结果
true
true
false
false
true
false
解释
Integer 对象除了可以通过new来创建,也可以直接将int值赋值给Integer变量,这是因为系统会自动根据将这个int值封装成一个Integer对象,比如:Integer a=100;实际操作是:Integer a=Integer.valueof(100);
这里有一个需要注意的地方:在上面Integer的valueOf()方法里面,当int值范围在-128—127之间时,会通过一个IntegerCache缓存来创建Integer对象;两个Integer变量引用是IntegerCache中的同一个对象,比较的内存地址相同。
当int值不在以上范围时,两个Integer对象都是通过new创建的,比较的内存地址不同。
\