java吧 关注:1,190,715贴子:12,602,563
  • 14回复贴,共1

java自动装箱机制

只看楼主收藏回复

Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1 == i2);
Integer i3 = 1000;
Integer i4 = 1000;
System.out.println(i3 == i4);
这段程序运行结果是什么
有谁能解释么


IP属地:湖南1楼2014-01-06 17:50回复
    我从来把Integer转为int, 再做运算之类的操作


    IP属地:福建2楼2014-01-06 17:56
    收起回复
      Integer拥有一个小常量池,可以检查一下源代码里的Integer#valueOf(int)方法,自动装箱调用的是这个方法


      IP属地:广西4楼2014-01-06 18:34
      收起回复
        你认为是两ture!


        IP属地:安徽来自Android客户端5楼2014-01-06 18:36
        回复
          第一个是True 第二个是False
          据说Integer里的-128~127区间内已经有封装好的东西。每次返回都是同一个对象。
          --------------------------------------------------------------------------------------------------------
          Integer i1 = 127;
          Integer i2 = 127;
          System.out.println(i1 == i2); //True
          Integer i3 = 1000;
          Integer i4 = 1000;
          System.out.println(i3 == i4); //False
          -------------------------------------------------------------------------------------------------------
          Integer i1 = -128;
          Integer i2 = -128;
          System.out.println(i1 == i2); //True
          Integer i3 = 1000;
          Integer i4 = 1000;
          System.out.println(i3 == i4); //False
          --------------------------------------------------------------------------------------------------------
          而只有超出这个范围,才会新建对象。
          --------------------------------------------------------------------------------------------------------
          Integer i1 = 128
          Integer i2 = 128;
          System.out.println(i1 == i2); //False
          Integer i3 = 1000;
          Integer i4 = 1000;
          System.out.println(i3 == i4); //False
          --------------------------------------------------------------------------------------------------------
          Integer i1 = -129
          Integer i2 = -129;
          System.out.println(i1 == i2); //False
          Integer i3 = 1000;
          Integer i4 = 1000;
          System.out.println(i3 == i4); //False
          --------------------------------------------------------------------------------------------------------
          同时,JDK1.7有关于Integer的valueOf()方法源代码的注解也说明了这一点。
          This method will always cache values in the range -128 to 127,


          IP属地:北京7楼2014-01-06 19:33
          收起回复
            第一个true 第二个false


            来自Android客户端8楼2014-01-06 20:12
            回复