Java基础:基本数据类型包装类使用的常量池技术

Byte,Short,Integer,Long 默认创建了[-128,127]的相应类型的缓存数据
Character创建了[0,127]范围的缓存数据
Boolean直接返回True Or False
如果超出对应范围,仍会去创建新的对象

Integer缓存源代码:

public static Integer valueOf(int i) {
	if (i >= IntegerCache.low && i <= IntegerCache.high)
		return IntegerCache.cache[i + (-IntegerCache.low)];
	return new Integer(i);
}

应用场景
Integer i1=40; Java编译时会直接将代码封装为Integer
i1=Integer.valueOf(40); 从而使用常量池中的对象

例子:

Integer i1 = 40;
Integer i2 = 40;
Integer i3 = 0;
Integer i4 = new Integer(40);
Integer i5 = new Integer(40);
Integer i6 = new Integer(0);
System.out.println("i1==i2 " + (i1 == i2));
System.out.println("i1==i2+i3 " + (i1 == i2 + i3));
System.out.println("i1==i4 " + (i1 == i4));
System.out.println("i4==i5 " + (i4 == i5));
System.out.println("i4==i5+i6 " + (i4 == i5 + i6));
System.out.println("40==i5+i6 " + (40 == i5 + i6));

结果:

i1==i2 true
i1==i2+i3 true
i1==i4 false
i4==i5 false
i4==i5+i6 true
40==i5+i6 true

解释:
i4==i5+i6 true 是因为+运算符不适用于Integer对象,首先i5和i6进行自动拆箱操作,进行数值相加,即i4==40,然后Integer无法与数值比较,所以i4
自动拆箱成40,所以最后时数值比较 40==40。

摘抄自JavaGuide

你可能感兴趣的:(Java基础,java,后端)