JDK新特性之自动拆装箱

自动拆箱装箱
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 之间,会直接从缓冲池里获取数据,反之,创建新的空间。

发布了52 篇原创文章 · 获赞 6 · 访问量 1443

猜你喜欢

转载自blog.csdn.net/qq_40488936/article/details/104904622