Integer类型,自JDK1.5引入一个缓存的valueOf 方法
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
private static class IntegerCache {
static final int low = -128;
}
即创建的Integer对象,如果值在 -128到127 之间,则会去缓存中查找对象,而不创建一个新的对象
当缓存中没有,或超过这个范围时,才会创建新对象
同样地,其他引用数据类型也有缓存的valueOf方法
【测试】
Integer a = Integer.valueOf("127");
Integer b = Integer.valueOf("127");
System.out.println(a == b);// true
a = Integer.valueOf("128");
b = Integer.valueOf("128");
System.out.println(a == b);// false
a = Integer.valueOf("-128");
b = Integer.valueOf("-128");
System.out.println(a == b);// true
a = Integer.valueOf("-129");
b = Integer.valueOf("-129");
System.out.println(a == b);// false