java Integer.ValueOf(int)和new Integer(int)性能比较_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java Integer.ValueOf(int)和new Integer(int)性能比较

java Integer.ValueOf(int)和new Integer(int)性能比较

 2013/8/18 21:29:34  zjf201172653  程序员俱乐部  我要评论(0)
  • 摘要:javaInteger.ValueOf(int)和newInteger(int)性能比较转自http://blog.csdn.net/zhongweijian/article/details/5317375JDK的源码,看看到Integer.ValueOf(int)里面做了什么优化:[java]viewplaincopypublicstaticIntegervalueOf(inti){finalintoffset=128;if(i>=-128&&i<=127)
  • 标签:Java Integer.valueOf

?

class="link_title"> java Integer.ValueOf(int)和new Integer(int)性能比较 ? ??

转自 ? http://blog.csdn.net/zhongweijian/article/details/5317375

?

JDK的源码,看看到Integer.ValueOf(int)里面做了什么优化:

?

[java] view plaincopy
  1. public?static?Integer?valueOf(int?i)?{??
  2. ??final?int?offset?=?128;??
  3. ??if?(i?>=?-128?&&?i?<=?127)?{?//?must?cache??
  4. ????return?IntegerCache.cache[i?+?offset];??
  5. ??}??
  6. ??return?new?Integer(i);??
  7. }???
  8. ??
  9. private?static?class?IntegerCache?{??
  10. ??private?IntegerCache(){}??
  11. ??????
  12. ??static?final?Integer?cache[]?=?new?Integer[-(-128)?+?127?+?1];??
  13. ??static?{??
  14. ??for(int?i?=?0;?i?<?cache.length;?i++)??
  15. ?????cache?=?new?Integer(i?-?128);??
  16. ??}??
  17. }???

从源代码可以知道,ValueOf对-128~127这256个值做了缓存(IntegerCache),如果int值的范围是:-128~127,在ValueOf(int)时,他会直接返回IntegerCache的缓存给你。

?

[java] view plaincopy public static void main(String []args) { ?
?? ????? Integer a = 10; ?
?? ????? Integer b = 10; ?
?? ????? System.out.println(a==b); ?
?? ????? Integer c = new Integer(10); ?
?? ????? Integer d = new Integer(10); ?
?? ????? System.out.println(c==d);
?? ???? ?
??? ???? Integer e = 200;
?? ????? Integer f = 200;
?? ????? System.out.println(e == f);
?? ?}

?

结果是:

true
false

false

因为:java在编译的时候 Integer a = 10; 被翻译成-> Integer a = Integer.valueOf(10);,所以a和b得到都是一个Cache对象,并且是同一个!而c和d是新创建的两个不同的对象,所以c自然不等于d。然而,当数据超出-128~127范围时,就不会先做Integer e = Integer.valueOf(200)这样的操作了。

发表评论
用户名: 匿名