首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Integer.ValueOf(int)跟new Integer(int)性能比较

2012-12-24 
Integer.ValueOf(int)和new Integer(int)性能比较JDK的源码,看到Integer.ValueOf(int)里面做了优化public

Integer.ValueOf(int)和new Integer(int)性能比较
JDK的源码,看到Integer.ValueOf(int)里面做了优化

public static Integer valueOf(int i) {final int offset = 128;if (i >= -128 && i <= 127) { // must cachereturn IntegerCache.cache[i + offset];}return new Integer(i);}private static class IntegerCache {private IntegerCache() {}static final Integer cache[] = new Integer[-(-128) + 127 + 1];static {for (int i = 0; i < cache.length; i++)cache[i] = new Integer(i - 128);}}

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

public static void main(String[] args) {Integer a = 100;Integer b = 100;System.out.println(a == b);Integer c = new Integer(100);Integer d = new Integer(100);System.out.println(c == d);}


结果是:

true
false

java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);,所以a和b得到都是一个Cache对象,并且是同一个!而c和d是新创建的两个不同的对象,所以c自然不等于d。

ps:比较是用的==

热点排行