黑马程序员技术交流社区

标题: 有质量的问题,高手进 [打印本页]

作者: 編程浪子    时间: 2012-3-12 21:12
标题: 有质量的问题,高手进
  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);
复制代码
第一个输出相等,第二个输出不相等,为什么?

作者: 赵英坤    时间: 2012-3-12 21:22
本帖最后由 赵英坤 于 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
作者: 朱华    时间: 2012-3-12 21:25
iteger对象在1个字节之内(-127~127)之间的全是同一个对象,==比的是内存地址,那必然你怎么比都是一样的

129超过1字节了,那就是俩对象了
作者: 段玉超    时间: 2012-3-12 21:36
你为什么不在问问题之前找找答案呢?
作者: 冯林    时间: 2012-3-12 21:58

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指向的不同对象。
作者: 张一凡    时间: 2012-3-12 23:09
这个使用到了java的自动装箱技术。
如果自动装箱的数据在byte范围之内,同样的数据不开辟新的空间。
而这个范围就是1个byte的取值范围:-128~127.超过了这个范围就要重新开辟新的空间了。




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