Integer integer = 128;
Integer integer1 = 128;
Integer integer2 = 127;
Integer integer3 = 127;
System.out.println(integer == integer1); // false
System.out.println(integer2 == integer3); // true --- why?
这是Integer中的缓存机制 默认缓存-128~127
Integer integer = 128;
我们进行反编译后: Integer integer = Integer.valueOf(128);
// 这是Integer的valueOf()方法 IntegerCache.low这是缓存最小值-128 IntegerCache.high这是缓存最大值127
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high) // 如果在这个缓存范围内就直接返回缓存中的值
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i); // 如果不在范围内就返回一个新的实例对象
}
Integer a = 228;
int a1 = a; 这个反编译过来是 a.intValue();
拆箱默认调用包装类的方法intValue()返回值
包装器的缓存:
- Boolean:(全部缓存)
- Byte:(全部缓存)
- Character(<= 127缓存)
- Short(-128 — 127缓存)
- Long(-128 — 127缓存)
- Integer(-128 — 127缓存)
- Float(没有缓存)
- Doulbe(没有缓存)
网友评论