黑马程序员技术交流社区

标题: 深入Integer [打印本页]

作者: liumeng    时间: 2012-2-28 10:01
标题: 深入Integer
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
这是为什么?


作者: 张开开    时间: 2012-2-28 10:10
这是因为Integer在创建对象时,如果其值在范围(-128--127)之间时,会将值放入缓冲池,如果下次再创建这个值Integer对象时。就直接用这个缓冲池中的引用了,而如果大于这个范围,则创建一个新的对象。
作者: 田啸    时间: 2012-2-28 10:18
这个应该算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


作者: liumeng    时间: 2012-2-28 10:25
哥你差了是-128到127




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