黑马程序员技术交流社区

标题: 求解释 结果为什么不一样 [打印本页]

作者: 潘际昌    时间: 2013-11-23 15:08
标题: 求解释 结果为什么不一样
本帖最后由 潘际昌 于 2013-11-24 00:55 编辑



作者: likeermei    时间: 2013-11-23 15:13
这个题的结果是。。a==b .     因为。第一个条件成立会优先走第一句话
作者: 王贺    时间: 2013-11-23 15:30
这个可以简单的解释下,首先Integer和int是不一样的,一个是包装类,一个不是,而它们的表示也不一样。
public static Integer valueOf(int i) {
2         assert IntegerCache.high >= 127;
3         if (i >= IntegerCache.low && i <= IntegerCache.high)
4             return IntegerCache.cache[i + (-IntegerCache.low)];
5         return new Integer(i);
6     }
可以看看Integer的处理,当大于127的时候就不一样了,所以楼主上面100的时候和200的时候就不一样了,希望有用
作者: 忄雾飞扬    时间: 2013-11-23 15:46
这里涉及到了一个技术,“享元模式”;
当某些较小的数据,被经常调用时,就只会在内存中创建一个对象引用,
当这个对象被引用时,不会被创建新对象引用,
在创建Integer对象时,Integer值在byte值(+127到-128)范围内时,创建的Integer新对象只会引用缓冲池内的对象,不会创建新的对象,当超出byte值范围内,才会new新的Integer对象
本代码中,第一个类,a和b的值,都byte范围内,所以指向了同一个对象引用,
而第二个类中,a和b的值为200,超出了byte范围内,所以b和a都创建了不同的对象引用,
作者: 忘记了    时间: 2013-11-23 23:02
记得毕老师说过,==是用于比较地址,你用a.equals(b) 就会显示相同了,这个方法比较的是对象内容。
原因就是楼上说的一样,在范围内。a,b都是指向同一个地址。超出范围,a,b就指向不同地址,所以得到的结果不同。




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