自动拆箱装箱
Integer ii = 100;
ii += 200;
System.out.println("ii:"+ii);
等价于
Integer ii = Integer.valueof(100);//自动装箱
ii = Integer.valueOf(ii.intValue() + 200);//自动拆箱再自动装箱
System.out.println(new StringBuilder("ii:").append(ii).toString())
Integer的数据直接赋值
首先要明确一点的是 Integer 类里是重写了equals() 方法,所以 == 比较的地址值,equals() 比较的是内容
Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
Integer i3 = new Integer(128);
Integer i4 = new Integer(128);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6); //false
System.out.println(i5.equals(i6)); //true
Integer i7 = 128;
Integer i8 = 128;
System.out.println(i7 == i8); //true
System.out.println(i7.equals(i8)); //true
以上我们了解自动装箱操作,直接赋值其实就是:
Integer ii = Integer.valueof(127)
再看 valueOf() 方法的源码
其中low -128
high 127
public static Integer valueOf(int i) {
assert IntegerCache.heigh >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.heigh)
return IntegerCache.cache[i+(-InteferCache.low)];
return new Integer(i);
}
通过源码就发现,针对 i 在-128到127之间做了一个数据缓冲区,如果数据在 -128 到 127 之间,会直接从缓冲池里获取数据,反之,创建新的空间。