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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Integer x = 128;
Integer y = 128;
x==y的返回值是false。
Integer m = 127;
Integer n = 127;
m==n的返回值是true。
为什么?     

3 个回复

倒序浏览
不可能吧?
回复 使用道具 举报

这个我试过,是真的。然后突然想到毕姥爷在视频中讲到过一个名词常量池,包含127不包含128的概念,但不知道是哪一集了,我又百度了一下常量池。八种基本类型的包装类和对象池,那里说的很明确。有兴趣可以自己好好看看。。。。意思就是常量池有127,但是没有128。。那么就是128赋值时因为常量池中没有128对象,所以它开辟了两个128的Integer对象,等同于new了两个对象。并分别指向x和y。俩128的内存地址是不一样的,所以是false。这个应该都理解。。但是定义m和n的时候,系统发现内存中本来就有Integer类型的常量127,所以m和n都指向了内存中的同一个对象。。
回复 使用道具 举报 1 0
                Integer x = 127;
                Integer y = (int)Byte.MAX_VALUE;
                System.out.println(x==y);
楼上说的常量池应该是真的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马