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

integer i =二

2012-12-27 
integer i 2java在编译的时候 Integer i 20 被译成Integer i Integer.valueOf(2)JDK源代码private

integer i =2
java在编译的时候
Integer i = 20;
被译成
Integer i = Integer.valueOf(2);
JDK源代码
    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);
}
    }
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);
    }

就看出来  有一个cache数组 范围是0~~255  里面数值是-128 到127 
if (i >= -128 && i <= 127)
所以当i的值在-128到127直接 其实是一个对象 
Integer cache[]
而在这个范围外就是另外一个对象了
return new Integer(i);
所以用==比 就是比引用 就是FALSE
但是重写了equles
用equles这个方法比就是TRUE

这是Java处于性能的考虑,目的是节省内存。
至于范围之外的,不同的引用当然不相等了

热点排行