整数包装类
对于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方法完成赋值。
- 它会首先判断是否在[-127,128]区间内,若在,则返回缓存数组cache中相对应的引用;
? 若不在,则调用构造方法创建对象。
- 值得一提的是,因为byte类型数据本身的赋值范围就在此区间内,所以它的构造方法和后两种是分开的。即通过后两种方法必然会在此区间内。