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的说明,上面写着原来这个缓存值是可以调的