黑马程序员技术交流社区

标题: 关于基本数据类型包装类的问题。 [打印本页]

作者: 李涛兴    时间: 2012-11-17 23:49
标题: 关于基本数据类型包装类的问题。
本帖最后由 李涛兴 于 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类型赋值吗?
作者: 张利    时间: 2012-11-17 23:57
因为byte型数据比较小,操作频繁,因此对于这个数据有一个缓存区,第一次出现创建对象后,第二次再次创建对象的时候直接指向了缓存区中的对象,因为指向的是同一个对象,所以·-128到127内是会出现true的结果;而超出了这个范围的,就是正常的创建对象了,创建了两个对象,因此是false
作者: 森仔    时间: 2012-11-18 00:02
Integer在对象池中只保存从-128~127之间的整数
超出了就创建新对象
m==n 比较的 m 和n 的引用,所以是false
作者: 李涛兴    时间: 2012-11-18 11:34
感谢上面的同学给的见解,希望有同学给出更详细点的讲解,感激...




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