返回信息流Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
if(i4 == i5 + i6)
return true;
为何i4 == i5+i6 啊?搞不懂。。。
这是一条镜像帖。来源:北邮人论坛 / java / #30066同步于 2014/5/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于java内存求问。
Gewter
2014/5/22镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Update: 2014年5月24日
当时回答的时候没有细想,楼下各位大神指出了我的错误
回头看了一下,确实还有很多问题,再重新尝试回答一下:
1.考虑以下代码:
返回是false和true,说明两个new Integer(40)时确实生成了不同新对象,
而Integer i3 = 40和Integer i4 = 40是一个装箱过程,
实际上调用的是Integer.valueOf()函数,
从下面的源码可以看到,在(-128,127)之间返回的是JVM缓存的对象,
因此在这里i3==i4,也证明了我之前的答案是错误的:
2.再考虑以下代码:
返回的是true和false,说明当i2 + i3时,JVM仅仅进行了拆箱操作,
实际上比较的是 i1 == 40,而比较Integer和int的时候JVM会继续拆箱,
40 == 40,因此会返回true,如果将(Integer)(i5 + i6)这样操作,
i5 + i6会装箱生成一个新的Integer对象,再比较就会返回false了
感谢@guodanpi @Gewter @gcheng fastislow 等同学的讨论,让我学到了新东西~
=============原答案================
new Interger(i) 的时候,如果 -128<i<127 则返回的是同一个对象
也就是说,这里有 i4 == i5,
然后Integer互相相加的时候,JVM会先拆箱成int类型,
40 + 0 = 40 ,结果还是在-128到127之间,
JVM再装箱,设 i7 = i5 + i6 的话,
i7 = i5 + i6 = new Interger(40),指向的仍是同一个对象
即i4 == i7 == i5 + i6
【 在 Gewter (骑单车绕北京) 的大作中提到: 】
: Integer i4 = new Integer(40);
: Integer i5 = new Integer(40);
: Integer i6 = new Integer(0);
: ...................
明白了!解释得好到位!多谢版主!
【 在 dss886 的大作中提到: 】
: new Interger(i) 的时候,如果 -128<i<127 则返回的是同一个对象
: 也就是说,这里有 i4 == i5,
: 然后Integer互相相加的时候,JVM会先拆箱成int类型,
: ...................
好不容易碰见个会的被抢先了。。
【 在 dss886 (打击楼主) 的大作中提到: 】
: new Interger(i) 的时候,如果 -128<i<127 则返回的是同一个对象
: 也就是说,这里有 i4 == i5,
: 然后Integer互相相加的时候,JVM会先拆箱成int类型,
: ...................
大神,这都是在哪学的。,推荐本学java的书
【 在 dss886 的大作中提到: 】
: new Interger(i) 的时候,如果 -128<i<127 则返回的是同一个对象
: 也就是说,这里有 i4 == i5,
: 然后Integer互相相加的时候,JVM会先拆箱成int类型,
: ...................
我开始也不懂..现场Google的...
Google “Java Integer()”,有这个:
http://blog.163.com/jackswu@yeah/blog/static/140629123201101901813892/
然后Google “Java Integer() 相加”,有这个
http://zhidao.baidu.com/question/38810926.html
还有这个:
http://bbs.chinaunix.net/thread-1048175-1-1.html
然后综合了一下就得出结论了...
至于Java的书,推荐《疯狂Java讲义》,不过这本书不适合入门
【 在 elite1189 (【紫棋团】全都是泡沫,只一刹的花火) 的大作中提到: 】
: 大神,这都是在哪学的。,推荐本学java的书
《疯狂讲义》适合什么阶段看呢?从露珠自己的经历来看有没有比较好的进阶书籍推荐呢,露珠都看过哪些?
【 在 dss886 (打击楼主) 的大作中提到: 】
: 我开始也不懂..现场Google的...
: Google “Java Integer()”,有这个:
: http://blog.163.com/jackswu@yeah/blog/static/140629123201101901813892/
: ...................
通过『我邮2.0』发布
啊,我就看过《Head First Java》和《疯狂Java讲义》。。
【 在 kingkongman (kingkongman) 的大作中提到: 】
: 《疯狂讲义》适合什么阶段看呢?从露珠自己的经历来看有没有比较好的进阶书籍推荐呢,露珠都看过哪些?
: 【 在 dss886 (打击楼主) 的大作中提到: 】
: 通过『我邮2.0』发布
: ...................