A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nicezt 中级黑马   /  2016-9-25 23:35  /  1571 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用==比较时
Integer in1 = new Integer(1); Integer in2 = new Integer(1); in1==in2 是false
Integer in3 = 1;Integer in4 = 1;   in1==in2  是false.
第一个可以理解是两个不同的对象,所以不相等,第二种情况怎么解释呢!

11 个回复

倒序浏览
下面那句写错了 是Integer in3 = 1;Integer in4 = 1;   in3==in4  是false.
回复 使用道具 举报
其实这是包装对象的特性: 自动装箱
Integer i = 1 等同于 Integer i = Integer.valueOf(1)

回复 使用道具 举报
你确定你敲出来答案是false?!!我看了是true,用Eclipse验证了也是true,截图如下:
自动拆箱都是1,自然相等!

2016-09-26_003251.png (244.05 KB, 下载次数: 19)

2016-09-26_003251.png
回复 使用道具 举报
刚刚截图发错了,你自己试试,好好想想!

2016-09-26_003651.png (314.4 KB, 下载次数: 6)

2016-09-26_003651.png
回复 使用道具 举报
没毛病,in3==in4是true
回复 使用道具 举报
11111111111
回复 使用道具 举报
nicezt 中级黑马 2016-9-26 22:26:49
8#
帅哥军 发表于 2016-9-26 00:38
刚刚截图发错了,你自己试试,好好想想!

Integer in1 = new Integer(1); Integer in2 = new Integer(1); in1==in2 返回时false.
创建个新对象,不是Integer in3=1;
回复 使用道具 举报
nicezt 中级黑马 2016-9-26 22:46:48
9#
hydome 发表于 2016-9-26 00:04
其实这是包装对象的特性: 自动装箱
Integer i = 1 等同于 Integer i = Integer.valueOf(1)

我好像明白点了,Integer i = new  Integer(1);创建时有两个步骤,一个是为i在栈内存中分配空间,为Integer在堆内存中分配空间,这是创建了两个空间。而Integer i =1 只在栈中分配了一个对象。然后。。。怎么解释呢
回复 使用道具 举报
本帖最后由 &天马星空ぁ 于 2016-9-27 10:52 编辑
nicezt 发表于 2016-9-26 22:46
我好像明白点了,Integer i = new  Integer(1);创建时有两个步骤,一个是为i在栈内存中分配空间,为Integ ...

Integer i=200; 就相当于Integer i=Integer.valueOf(200);  调用了一个自动封箱功能    而这个valueOf()方法 的返回值就是new Integer(i);   所以说Integer i=new Integer(200);和Integer i=200;是一样一样的
都是在堆内存中先创建一个对象   然后在从常量池中引用的200的地址
然而-128到127,是你在创建第一个对象时候赋值,会有一个缓存处理,在第二次赋同样的值时候,会直接调用第一次常量池中这个值得地址,所以对于Integer-128到127 ==比较会是true  超过这个值就是false
回复 使用道具 举报
&天马星空ぁ 发表于 2016-9-27 10:50
Integer i=200; 就相当于Integer i=Integer.valueOf(200);  调用了一个自动封箱功能    而这个valueOf()方 ...

从你的解释中我明白了
Integer i1=1;Integer i2=1;i1==12;是true,而
Integer i1=128;Integer i2=128;i1==12;是false.这一点学习了。
至于Integer i1=1和Integer i2=new Integer(1);还是不一样的,前者只创建了一个对象,后置创建了两个对象.前者就和你说的一样,在常量池中指向了同一块地址,而后者会在堆内存中分别开辟空间。在==比较的过程中所以后者都会返回false.
回复 使用道具 举报
。。。。。。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马