黑马程序员技术交流社区
标题:
有质量的问题,高手进
[打印本页]
作者:
編程浪子
时间:
2012-3-12 21:12
标题:
有质量的问题,高手进
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);
复制代码
第一个输出相等,第二个输出不相等,为什么?
作者:
赵英坤
时间:
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