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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丘凤光 金牌黑马   /  2013-4-1 18:11  /  1268 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丘凤光 于 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 相等吗?

3 个回复

倒序浏览
我把你的代码改成这样
  1. Integer i1=5;
  2. Integer i2=i1+0;
  3. System.out.println(i1==i2);
复制代码
结果为true
1.5版本的新特性,基本数据类型包装类的对象缓存.数值在byte范围内不会开辟新空间.i1和i2是同一个对象.
同理,你的问题应该也是这样.

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
张熙韬 发表于 2013-4-1 18:26
一个小小的例子,这说明i的地址没有改变.因i+0的运算,i的指针没有移动,i还是原来的i ...

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

哦哦,知道了。
知识没记牢真是错误不断啊。
谢谢哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马