Integer中的问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 19:55:17
public static void main(String[] args){
Integer a = 127;
Integer b = 127
System.out,println(a=b);

Integer c = 200;
Integer d = 200
System.out,println(c=d);
}
答案是:true,false

解释如下:
Integer类当中的源码
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);
}

if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
如果当i的值在-128到127之间,会将其cache(缓存)起来,会节省内存和改善性能,这个是jdk1.5版本自带的功能。当不在这个范围就会重新创建一个Integer对象。

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);

……LZ很有意思。
System.out,println(a=b);
这一句话中有两个bug,应该是
System.out.println(a==b);
另外这个问题确实是这样的,Integer会自动缓存[-128,127]之间的Integer对象。不过你如果这么写:
Integer a = new Integer(126);
Integer b = new Integer(126);
System.out.println(a==b);
输出false

你想问什么?