读书人

integer i =二

发布时间: 2012-12-27 10:17:10 作者: rapoo

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处于性能的考虑,目的是节省内存。
至于范围之外的,不同的引用当然不相等了

读书人网 >编程

热点推荐