黑马程序员技术交流社区

标题: 问题求助 [打印本页]

作者: 杨胜男    时间: 2014-5-27 20:55
标题: 问题求助
Integer m = 128;
Integer n = 128;

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


打印结果为什么是false?
作者: raikecody    时间: 2014-5-27 21:03
我觉得应该是因为m和n分别创建了两个不同的Integer实例对象。

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

不知道对不对~
作者: 木华    时间: 2014-5-27 21:16
如果在-128至127范围内时,才是正确的,也就是所谓的享元模式。共用对象。
作者: yinxjfly    时间: 2014-5-27 21:24
看我发的帖子,有解答!
作者: 孟祥钰    时间: 2014-5-27 21:25
Integer在创建一个对象的时候,如果值小于1b即在(-128~127)范围中那么,会将值放入缓冲池,下次再创建这个值的时候,Integer对象会直接在缓冲池中的调用第一次创建的值
如果创建对象的值不在-128~127范围内,则会创建新的对象。
就是说楼主你发的那个 Integer m = 128; 和 Integer n = 128;是两个不同的对象,分别指向不同的地址值。所以用 ==进行比较,地址值不同,输出的是false
如果是Integer m = 127; Integer n = 127;的话 输出结果就是true了
这是我理解的,你看看能明白了么
作者: 成小龙    时间: 2014-5-27 21:55
这个视频里有,超过了127范围,会创建新的对象,所以引用指向就不一样了
作者: yang1352546    时间: 2014-5-27 22:18
Integer m = 128;   Integer n = 128;
他们是new的两个对象,地址值是不以样的。
如果数值是在-128——127范围内,如果数值已存在就不会创建新空间,就会指向同一个Integer,结果就是true了。
作者: 战狼    时间: 2014-5-27 22:57
你应该用int,integer代表的是一个integer对象,int是interger的子类。对象在内存中的地址是不一样的。

作者: 杨胜男    时间: 2014-6-5 11:51
yinxjfly 发表于 2014-5-27 21:24
看我发的帖子,有解答!

感谢,内容和详细
作者: zly1992008    时间: 2014-6-5 12:23
常量池的定义的范围在-128~127,楼主如果这里你的m和n都换成比127小的数字,那就是true了




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