对于对象来说,==比较的是内存地址
比较对象的值用equals
从jdk1.5开始,有了“自动装箱的机制”,在byte-128到127范围内[整型的八位二进制的表示的范围为-128到127]
如果存在了一个值,再创建相同的值的时候就不会重新创建,而是引用原来那个
但是byte范围外还是会新建的对象
Integer i=100,i1=100;
Integer i2=188,i3=188;请问i2==i3么?i==i1么?
综上i==i1为true,i2==i3为false自动拆箱机制:基本数据类型和对象比较的时候,对象会自动拆箱为基本数据类型再比较
比较的就是里面的值而不是地址
Integer i1=new Integer(128);
int i2=128;
i1==i2;
对象i1经历拆箱过程先变为int i1=128;再比较数值
下面是一些实例
Integer i1=new Integer(128);
int i2=128;
Integer i3=new Integer(128);
Integer i4=128;
Integer i44=127;
Integer i5=128;
Integer i55=127;String a="123";
String b=new String("123");//在堆创建一个对象被b引用,然后堆中的值指向常量池的"123"
a==b; //两者指向的地址不同,所以为false
i1==i2;//i1经历拆箱过程将i1变成int i1=128,所以为true
i1==i3;//两个都是new,两个对象间的比较,比较的是地址,所以为false
i3==i4; //不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不同,所以为falsei4==i5; //Integer间的比较,自动装箱过程,超过范围则创建新对象
i44==i55; //Integer间的比较,自动装箱过程,超过范围则创建新对象
Integer i1=127;
Integer i2=127;
在i1=i2=127时,i1==i2为true
在i1=i2=128的时候是false
int i1=128;
Integer i2=128;
无论值是多少 i1==i2都是true
Integer i1=2;
Integer i2=new Integer(2);
无论值是多少 i1==i2都是false 因为是对象的比较,地址不同