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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 編程浪子 中级黑马   /  2012-3-12 21:12  /  2028 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 4.        Integer num1 = 12;
  2. 5.        Integer num2 = 12;               
  3. 6.        System.out.println(num1 == num2);
  4. 7.        Integer num3 = 129;            
  5. 8.        Integer num4 = 129;
  6. 9.        System.out.println(num3 == num4);
复制代码
第一个输出相等,第二个输出不相等,为什么?

5 个回复

倒序浏览
iteger对象在1个字节之内(-127~127)之间的全是同一个对象,==比的是内存地址,那必然你怎么比都是一样的

129超过1字节了,那就是俩对象了

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1 加油

查看全部评分

回复 使用道具 举报
你为什么不在问问题之前找找答案呢?
回复 使用道具 举报
本帖最后由 赵英坤 于 2012-3-12 21:29 编辑

-128~127的数都会是true

去查下源码或者是java的自动装箱和拆箱

int型的12会被自动装箱成为Integer对象,而且对于[-128, 127]的int值会进行缓存,所以这里认为是同一对象。


Integer内部缓存了-128到127共256个Integer对象,Integer num1=12产生一个Integer对象,Integer num2=12会检查缓存中是否有指向12的对象,这个跟String有点类似,在范围内就是true
如果-128~127 外的数字,结果就是false

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报

4.        Integer num1 = 12;
5.        Integer num2 = 12;               
6.        System.out.println(num1 == num2);
7.        Integer num3 = 129;            
8.        Integer num4 = 129;
9.        System.out.println(num3 == num4);
Integer当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。
12在范围内,num1先开辟了空间,所以num2就不会再开辟空间,直接指向num1指向的对象;129超过了范围。num3和num4都会开辟空间。
num1和num2指向同一个对象。num3与num4指向的不同对象。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
这个使用到了java的自动装箱技术。
如果自动装箱的数据在byte范围之内,同样的数据不开辟新的空间。
而这个范围就是1个byte的取值范围:-128~127.超过了这个范围就要重新开辟新的空间了。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马