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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨胜男 中级黑马   /  2014-5-27 20:55  /  1146 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer m = 128;
Integer n = 128;

sop("m==n:"+(m==n));


打印结果为什么是false?

10 个回复

倒序浏览
我觉得应该是因为m和n分别创建了两个不同的Integer实例对象。

m==n比较的两个对象的哈希值,两个不同的对象就有两个不同的哈希值,所以不相等。

不知道对不对~
回复 使用道具 举报
如果在-128至127范围内时,才是正确的,也就是所谓的享元模式。共用对象。
回复 使用道具 举报
看我发的帖子,有解答!

点评

非常好,很详细  发表于 2014-6-5 11:54
回复 使用道具 举报
Integer在创建一个对象的时候,如果值小于1b即在(-128~127)范围中那么,会将值放入缓冲池,下次再创建这个值的时候,Integer对象会直接在缓冲池中的调用第一次创建的值
如果创建对象的值不在-128~127范围内,则会创建新的对象。
就是说楼主你发的那个 Integer m = 128; 和 Integer n = 128;是两个不同的对象,分别指向不同的地址值。所以用 ==进行比较,地址值不同,输出的是false
如果是Integer m = 127; Integer n = 127;的话 输出结果就是true了
这是我理解的,你看看能明白了么
回复 使用道具 举报 1 0
这个视频里有,超过了127范围,会创建新的对象,所以引用指向就不一样了
回复 使用道具 举报
Integer m = 128;   Integer n = 128;
他们是new的两个对象,地址值是不以样的。
如果数值是在-128——127范围内,如果数值已存在就不会创建新空间,就会指向同一个Integer,结果就是true了。
回复 使用道具 举报
战狼 中级黑马 2014-5-27 22:57:31
8#
你应该用int,integer代表的是一个integer对象,int是interger的子类。对象在内存中的地址是不一样的。
回复 使用道具 举报
yinxjfly 发表于 2014-5-27 21:24
看我发的帖子,有解答!

感谢,内容和详细
回复 使用道具 举报
常量池的定义的范围在-128~127,楼主如果这里你的m和n都换成比127小的数字,那就是true了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马