黑马程序员技术交流社区

标题: 自动装箱的问题 [打印本页]

作者: 陈帅雷    时间: 2011-12-22 14:12
标题: 自动装箱的问题
本帖最后由 陈帅雷 于 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?
作者: 马德强    时间: 2011-12-22 14:17
Integer在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,
所以i1 ,i2实际上参考至同一个对象。
如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,
即相当于每次装箱时都新建一个 Integer对象

作者: 房宝彬    时间: 2011-12-22 14:17
跟着学,我还没学到装箱,不过看代码 好象是不是因为  数值变大了?
作者: 黄达标    时间: 2011-12-22 14:19
因为,在JDK1.5之后,当数值在byte范围之内(-128到127)的时候,如果该数值已经存在,则不会开辟新的空间。
也就是说i1和i2指向的是同一个对象,而i3和i4则是指向两个对象。
作者: 房宝彬    时间: 2011-12-22 14:21
马德强 发表于 2011-12-22 14:17
Integer在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,
所以i ...

我猜对了:lol
作者: 周胜    时间: 2011-12-22 15:00
自动装箱的值是有范围的。超过这个范围两个引用就不相同了。-128~127~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2