一、两个new出来的Integer对象
public void test(){
Integer m=new Integer(1);
Integer n=new Integer(1);
System.out.println(m==n);
}
//结果返回false
//解析:都是new出来的对象,在堆中,比较的是两个地址值;
二、new一个对象与赋值一个对象
public void test(){
Integer m=new Integer(1);
Integer n=1;
System.out.println(m==n);
}
//结果返回false
//解析:m在堆中,n在常量池中,都是Integer类型,比较的是地址,因此不等。
三、两个对象的赋值
(1)值在-128~127之间(可取-128和127)
public void test(){
Integer m=-127;
Integer n=-127;
System.out.println(m==n);
Integer m1=Integer.valueOf(-127);
Integer n1=Integer.valueOf(-127);
System.out.println(m1==n1);
}
//结果返回true
//解析:创建的是同一个对象,这些对象已经缓存在IntegerCache里面了,因此相等
(2)值不在-127~128之间(可取-128和127)
public void test(){
Integer m=128;
Integer n=128;
System.out.println(m==n);
Integer m1=Integer.valueOf(128);
Integer n1=Integer.valueOf(128);
System.out.println(m1==n1);
}
//结果返回false
//解析:比较的是地址
四、int 和 Integer对象
public void test(){
int m=128;
Integer n=new Integer(128);
System.out.println(m==n); int m2=128;
Integer n2=128;
System.out.println(m2==n2);
int m3=128;
Integer n3=Integer.valueOf(128);
System.out.println(m3==n3);
}
//结果返回true
//Integer封装类型将会自动拆箱变为基本的数据类型int 后再进行比较,所以返回true