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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘际昌 中级黑马   /  2013-11-23 15:08  /  1412 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 潘际昌 于 2013-11-24 00:55 编辑


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 告诉你一个秘密。其实代码可以放代码框里的.

查看全部评分

4 个回复

倒序浏览
这个题的结果是。。a==b .     因为。第一个条件成立会优先走第一句话
回复 使用道具 举报 0 1
这个可以简单的解释下,首先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的时候就不一样了,希望有用

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
这里涉及到了一个技术,“享元模式”;
当某些较小的数据,被经常调用时,就只会在内存中创建一个对象引用,
当这个对象被引用时,不会被创建新对象引用,
在创建Integer对象时,Integer值在byte值(+127到-128)范围内时,创建的Integer新对象只会引用缓冲池内的对象,不会创建新的对象,当超出byte值范围内,才会new新的Integer对象
本代码中,第一个类,a和b的值,都byte范围内,所以指向了同一个对象引用,
而第二个类中,a和b的值为200,超出了byte范围内,所以b和a都创建了不同的对象引用,

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
记得毕老师说过,==是用于比较地址,你用a.equals(b) 就会显示相同了,这个方法比较的是对象内容。
原因就是楼上说的一样,在范围内。a,b都是指向同一个地址。超出范围,a,b就指向不同地址,所以得到的结果不同。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 鼓励新同学!!!

查看全部评分

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