阅读:1962次   评论:1条   更新时间:2013-07-30    
Integer.valueOf()方法实现如下:
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);
}

Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。
IntegerCache的实现:
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);
	}
}

测试代码
Integer i1 = Integer.valueOf(8);
Integer i2 = Integer.valueOf(8);
Integer i3 = Integer.valueOf(1000);
Integer i4 = Integer.valueOf(1000);
System.out.println(i1==i2);
System.out.println(i3==i4);
System.out.println(i1.equals(i2));
System.out.println(i3.equals(i4));

打印结果如下:
true
false
true
true
评论 共 1 条 请登录后发表评论
1 楼 jahu 2014-01-26 01:53

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics