一、两个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