对于Long Integer Byte Short等整数包装类而言,Java会缓存 [-128,127] 的整数。也就是说,对于两个同类型整数包装类对象的值,满足:
在这个区间内,并且值相同
间接或直接使用静态方法valueOf创建对象
间接是指直接赋一个整数值
Integer integer = 3;
直接是直接调用valueOf方法
Integer integer = Integer.valueOf(3);
就表示两个对象的地址空间相同。
以Integer为例
构造方法
public Integer(int value) {
this.value = value;
}
直接赋值 && valueOf方法
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
构造方法的方式一视同仁,对于任意的装箱,都是创建新的对象,不会有地址空间重复的情况
直接赋值和valueOf方法相同,前者间接调用valueOf方法完成赋值。
? 若不在,则调用构造方法创建对象。
原文:https://www.cnblogs.com/librel/p/14949138.html