1.什么是包装类?
java 提供了两种类型,基础类型和引用类型。使用基础类型在于效率。
然而当要使用针对于对象设计的API 和新特性的时候,例如泛型。那么基础数据类型就需要使用包装类来包装了。
image.png
2,包装类缓存问题
- Byte Short Integer Long 都是-128到127
- Character 是0到127
- 在他们缓存范围内,引用地址是一样的,超出之后,就会在堆里new一个。
- Double Float 都没有,没有缓存对象,每一个都是新new的
Integer i = 1;
Integer j = 1;
System.out.println(i == j);//true
Integer i = 128;
Integer j = 128;
System.out.println(i == j);//false
//因为超出Integer的缓存范围,所以在都是在堆里new的,所以引用地址不一致,所以为false
Integer i = new Integer(1);//新new的在堆中
Integer j = 1;//这个用的是缓冲的常量对象,在方法区
System.out.println(i == j);//false
Integer i = new Integer(1);//新new的在堆中
Integer j = new Integer(1);//另一个新new的在堆中
System.out.println(i == j);//false
Integer i = new Integer(1);
int j = 1;
System.out.println(i == j);//true,凡是和基本数据类型比较,都会先拆箱,按照基本数据类型的规则比较
@Test
public void test3(){
Double d1 = 1.0;
Double d2 = 1.0;
System.out.println(d1==d2);//false 比较地址,没有缓存对象,每一个都是新new的
}