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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈帅雷 黑马帝   /  2011-12-22 14:12  /  2945 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈帅雷 于 2011-12-22 22:45 编辑

Integer i1 = 13;
                Integer i2 = 13;       
                System.out.println(i1 == i2);//这里为什么是true?
               
                Integer i3 = 155;
                Integer i4 = 155;       
                System.out.println(i3 == i4);//这里为什么是false?

5 个回复

正序浏览
周胜 黑马帝 2011-12-22 15:00:22
地板
自动装箱的值是有范围的。超过这个范围两个引用就不相同了。-128~127~
回复 使用道具 举报
马德强 发表于 2011-12-22 14:17
Integer在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,
所以i ...

我猜对了:lol
回复 使用道具 举报
因为,在JDK1.5之后,当数值在byte范围之内(-128到127)的时候,如果该数值已经存在,则不会开辟新的空间。
也就是说i1和i2指向的是同一个对象,而i3和i4则是指向两个对象。
回复 使用道具 举报
跟着学,我还没学到装箱,不过看代码 好象是不是因为  数值变大了?
回复 使用道具 举报
Integer在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,
所以i1 ,i2实际上参考至同一个对象。
如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,
即相当于每次装箱时都新建一个 Integer对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马