黑马程序员技术交流社区

标题: 装箱与拆箱后数据变化的问题。 [打印本页]

作者: 丘凤光    时间: 2013-4-1 18:11
标题: 装箱与拆箱后数据变化的问题。
本帖最后由 丘凤光 于 2013-4-1 18:44 编辑

毕向东老师视频里基本数据类型对象包装类新特性里有个小知识点
  1. Integer i=5;//自动装箱
  2. i=i+3;//i自动拆箱——>求和——>自动装箱将和赋给i
复制代码
如果改成
  1. Integer i=5;
  2. i=i+0;
复制代码
想问一下,经过装箱拆箱操作,如果数值不变,i 的地址值改变了吗?就是最初的i和运算后的i 相等吗?

作者: 李尧    时间: 2013-4-1 18:30
我把你的代码改成这样
  1. Integer i1=5;
  2. Integer i2=i1+0;
  3. System.out.println(i1==i2);
复制代码
结果为true
1.5版本的新特性,基本数据类型包装类的对象缓存.数值在byte范围内不会开辟新空间.i1和i2是同一个对象.
同理,你的问题应该也是这样.
作者: 丘凤光    时间: 2013-4-1 18:35
张熙韬 发表于 2013-4-1 18:26
一个小小的例子,这说明i的地址没有改变.因i+0的运算,i的指针没有移动,i还是原来的i ...

Java中不是没有指针么?
之所以疑问主要是,程序经过装箱——>拆箱——>装箱,装箱的时候是new Integer(5)
两次装箱是不是就创建了两个Integer对象?
都是同一个i不好直接比较,还是有点小疑问。
作者: 丘凤光    时间: 2013-4-1 18:44
李尧 发表于 2013-4-1 18:30
我把你的代码改成这样结果为true
1.5版本的新特性,基本数据类型包装类的对象缓存.数值在byte范围内不会开辟 ...

哦哦,知道了。
知识没记牢真是错误不断啊。
谢谢哈。




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