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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李涛兴 中级黑马   /  2012-11-17 23:49  /  1531 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李涛兴 于 2012-11-18 11:30 编辑
  1. class  IntegerDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Integer m=128;
  6.                 Integer n=128;
  7.                 Integer a=127;
  8.                 Integer b=127;

  9.                 System.out.println("m==n: "+(m==n));
  10.                 System.out.println("a==b: "+(a==b));
  11.         }
  12.         
  13. }

  14. 运行结果
  15. m==n: false
  16. a==b: true
复制代码
在1.5版本的JDK中运行结果有这种差别,是因为定义的数值没有超过byte的数值范围内,而使a,b指向同一个对象。
请问为什么没有超过byte这个数值,就会指向同一个对象呢?是因为byte的数值范围是-128~127这个数值之间,byte就可以代替使用int类型赋值吗?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
因为byte型数据比较小,操作频繁,因此对于这个数据有一个缓存区,第一次出现创建对象后,第二次再次创建对象的时候直接指向了缓存区中的对象,因为指向的是同一个对象,所以·-128到127内是会出现true的结果;而超出了这个范围的,就是正常的创建对象了,创建了两个对象,因此是false
回复 使用道具 举报
Integer在对象池中只保存从-128~127之间的整数
超出了就创建新对象
m==n 比较的 m 和n 的引用,所以是false
回复 使用道具 举报
感谢上面的同学给的见解,希望有同学给出更详细点的讲解,感激...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马