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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liumeng 中级黑马   /  2012-2-28 10:01  /  1511 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer a=100;
  Integer b=100;
  if(a==b)
  {
   System.out.println("a==b");
   
  }else
   
  {
   System.out.println("a!=b");
  }

当a和b是100时候输出a==b

Integer a=200;
  Integer b=200;
  if(a==b)
  {
   System.out.println("a==b");
   
  }else
   
  {
   System.out.println("a!=b");
  }

但是当a和b是200是就输出a!=b
这是为什么?

3 个回复

倒序浏览
这是因为Integer在创建对象时,如果其值在范围(-128--127)之间时,会将值放入缓冲池,如果下次再创建这个值Integer对象时。就直接用这个缓冲池中的引用了,而如果大于这个范围,则创建一个新的对象。
回复 使用道具 举报
这个应该算java1.5新特性,a和b指向了同一个Integer对象。 当数值在byte范围内,对于新特性,如果该数值已经存在则不会在开辟新的空间。byte范围128 ~~~~  -127
如:Integer a = 128;
        Integer b = 128;
               
        System.out.println(a==b);
               
        Integer x = 127;
        Integer y = 127;
               
        System.out.println(x==y);
a==b  是false ,x==y 是true

回复 使用道具 举报
哥你差了是-128到127
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马