日期:2014-05-17  浏览次数:20882 次

jdk1.5以后的特性问题
public class Demo01 {
public static void main(String[] args) {
Integer num1=new Integer(12);
Integer num4=new Integer(12);
Integer num2=12;
Integer num3=12;
System.out.println(num1==num4); //false;
System.out.println(num1==num2); //false;
System.out.println(num2==num3); //true;
}
}
我想知道为什么红色的是false?
------解决方案--------------------
打开Integer源码一看便知

前面省略
* @since  1.5  <---- 1.5开始啦
     */
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

自动装箱的时候,如果在IntegerCache 实例的范围内,就会直接返回cache里的引用,
IntegerCache默认状态下缓存 -128至127,所以这个范围内同一个数值的自动装箱引用都一样
而超出这个范围,生成新的实例,引用自然不一样

再看一看IntegerCache的说明,上面写着原来这个缓存值是可以调的