我们都知道integer数值默认在 -128 ~ 127 内使用缓存机制,那么接下来看几个示例
//示例一
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2);//F
//示例2
Integer i3 = 127;
Integer i4 = 127;
System.out.println(integer3 == integer4);//t
这两种不同的结果是为什么呢?让我们深入源码来看一看
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
可以看到,在调用 valueOf(int) 方法时才会使用缓存机制,示例2中的自动装箱机制底层调用的就是 valueOf(int) 方法。
//自动装箱 int->Integer
Integer integer2 = n2; //底层使用的是 Integer.valueOf(n2)
//自动拆箱 Integer->int
int n3 = integer2; //底层仍然使用的是 intValue()方法