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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔚蓝小嗨 中级黑马   /  2013-5-12 17:06  /  1395 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蔚蓝小嗨 于 2013-5-13 06:57 编辑

Integer m=128;
Integer n=128;
System.out.println(m==n);
Integer a=127;
Integer b=127;
System.out.println(a==b);
为什么结果不一样,请详解

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
Integer的数值在【-128,+127】之间时,建立Integer对象时,会做缓存处理。
具体说来,Integer a=127 执行这条语句时,由于127在上边那个区间上,会把127缓存到常量区。
当执行下边这条语句Integer b=127时,先从常量区中查找有无127这个值,找到了就把常量区127的引用赋给了b. 此时a与b实际上都指向了常量区的那个127,所以a==b成立。
128不在上边那个区间,就没有这种待遇了。主要是因为这个区间上的数值小,用到的概率大,考虑性能,虚拟机做了缓存处理。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
知道了
回复 使用道具 举报
山西_李帅 来自手机 中级黑马 2013-5-13 01:42:05
板凳
楼上正解
回复 使用道具 举报
山西_李帅 来自手机 中级黑马 2013-5-13 01:42:32
报纸
byte类型的取值范围
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马