`

300 != 300

    博客分类:
  • Java
阅读更多
code:
  int value = 100; 
  Integer a = value; 
  Integer b = value; 
  System.out.println(a + "==" + b + " ? " + (a == b)); 

  value = 300; 
  a = value; 
  b = value; 
  System.out.println(a + "==" + b + " ? " + (a == b)); 
----------------------------------------------------------------------------- 
output: 
100==100 ? true 
300==300 ? false
----------------------------------------------------------------------------- 
decompile code: 
int value = 100; 
        Integer a = Integer.valueOf(value); 
        Integer b = Integer.valueOf(value); 
        System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString()); 
        value = 300; 
        a = Integer.valueOf(value); 
        b = Integer.valueOf(value); 
        System.out.println((new StringBuilder()).append(a).append("==").append(b).append(" ? ").append(a == b).toString());

-----------------------------------------------------------------------------
JDK source:
public static Integer valueOf(int i) { 
        final int offset = 128; 
        if (i >= -128 && i <= 127) { // must cache 
            return IntegerCache.cache[i + offset]; 
        } 
        return new Integer(i); 
    }

-----------------------------------------------------------------------------
原来1.5的box和unboxing功能只是个面具,编译器最终还是用了原来1.4的规则进行实现,不过1.5的Integer增加了 public static Integer valueOf(int i)的函数,内部实现了对-128到127之间的Integer对象的缓存,其用意和Boolean.valueOf一样避免过多的创建对象。看来我们今后应该避免写出new Integer(××)的代码了,应该都用Integer.valueOf(××)的方式。同时还有个StringBuilder的细节指的我们注意,这是1.5引入功能等同于StringBuffer的新类,只不过StringBuilder不再考虑线程安全的情况,看来1.5还是有不少针对效率的小细节优化,值得我们注意甚至是对编码习惯的更正。
分享到:
评论

相关推荐

    键盘扫描程序

    i&lt;300;i++) } uchar kbscan(void) { uchar sccode,recode; p2=0xF0; if((p2&0xF0)!=0xF0;) { delays(); if((p2&0xF0)!=0xF0) { scode=0xFE; while((sccode0x10)!=0) { p2=sccode; if((p2&0...

    c语言总题库.doc

    大约300道C语言考试题,供考试刷题用【程序33】题目:学习gotoxy()与clrscr()函数 1.程序分析:2.程序源代码: #include void main(void) { clrscr();/*清屏函数*/ textbackground(2); gotoxy(1, 5);/*定位函数*/ ...

    C语言程序 300实例集

    C语言程序 300实例集 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?...=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/  printf("%d,%d,%d\n",i,j,k);  } }

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-6

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    获得指定Url的HTML页面

    200表示成功,300以上的状态码通常表示重定向或错误。 - **异常处理**:代码中使用了try-catch块来捕获可能的`CInternetException`,确保程序的健壮性。 总之,获取指定URL的HTML页面涉及到对HTTP协议的理解、网络...

    简易交通灯

    =1&&int0_time==1) { TR0=1; //启动定时器 sec_nb=20; sec_dx=20; int0_time=0;//清标志 } else if(k3!=1&&int0_time==0) { TR0=1; set_timenb=sec_nb; set_timedx=sec_dx; //设置的键值返回保存 } } ...

    jquery过滤上传文件的类型和限制文件的大小

    = ".BMP" && ext != ".PNG" && ext != ".GIF" && ext != ".JPG" && ext != ".JPEG") { alert("仅支持bmp,png,gif,jpeg,jpg格式的图片"); return false; } // 创建Image对象 var img = new Image(); img.src ...

    C语言程序_300实例集

    =k&&i!=j&&j!=k)`确保生成的三位数没有重复数字。这种方法体现了C语言中的嵌套循环结构和条件控制,以及对整数的处理能力。 【程序2】是一个奖金计算问题,涉及利润分成算法的实现。程序首先根据给定的利润值(I)...

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-1

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-5

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-3

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-2

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    [CHM格式] DotNet Framework 4.0 参考手册 ([微软官方 MSDN]) 6-4

    Compression decreased file by 300,698,100 bytes. ========================== 补充说明 ========================== 本文档采用离线浏览方式,采集微软官方 MSDN 最新数据,收录了“MSDN Library -.NET Framework...

    【高考调研】2015高中数学 课时作业6 新人教A版选修2-3

    8. 第八题,因为没有重复数字,所以每个位置都有5种选择,但是要求个位小于十位,所以是组合问题,总共有(6*5)/2 = 300种。 9. 第九题是排列问题,考虑甲乙不能相对坐,可以先安排其他3人,有3!种方式,然后甲乙两...

    C语言学习300个例程

    =k&&i!=j&&j!=k)`来确保每个位置的数字都不相同。这种方法展示了C语言中的循环控制和条件判断,同时也演示了数组(虽然在这个例子中没有明确使用)的概念,因为数字1到4可以被视为一个数组的元素。 【程序 2】涉及...

    带存储功能电子琴 单片机c

    =0xf0) { nn=key(); if(nn&lt;=16) { d=c; c=b; b=a; a=nn; } } if(nn&lt;=14) { yinyue(nn); nn=0; } if(nn==15) { d3=1; mm=0xf0; while...

    仿google自动提示

    = 13 && event.keyCode != 38 && event.keyCode != 40) { var siteval = $("#name").val(); if (trim(siteval) == "") { $("#auto").hide(); return; } clearTimeout(lazyTime); lazyTime = setTimeout...

    VC++实现多边形填充

    #include &lt;windows.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; ...=boundarycolor)&&(GetPixel(hdc,n-1,m)!=boundarycolor)&&(n)) { contrary(hdc,n,m,RGB(0,0,255)); } } } }

    右下角逐渐弹出广告公告窗口,已实现链接可用并突破拦截弹出窗口,己美化

    右下角逐渐弹出广告公告窗口 ①已实现链接可用 ②并突破IE拦截弹出窗口 ③己解决多消息闪烁问题 ...==undefined&&msg1.close!==true) { msg1.show();} else { return true; } } //--&gt; &lt;/script&gt;

    C语言300-400之间的全部素数

    =0)` 内部的循环用于检测a是否为素数。初始时,b设为2(最小的素数),然后循环递增b直到找到能够整除a的数或b等于a为止。如果在b小于a的情况下找到了能够整除a的数,则说明a不是素数;反之,如果b等于a,那么a就是...

Global site tag (gtag.js) - Google Analytics