1.总图
包装类有以上八种基本数据类型及其包装类型。
2.包装类的应用场景
2.1集合类泛型只能是包装类
// 编译报错 List<int> list1 = new ArrayList<>();
//正常 List<Integer> list1 = new ArrayList<>();
2.2成员变量中不能有默认值
初始值的不同,封装类型的初始值为null,基本类型的的初始值视具体的类型而定,比如int类型的初始值 为0,boolean类型为false;
2.3方法参数中允许空值
比如方法参数中定义的基本类型为int,而我们就不能传递NULL,只能传数字,而实际工作中很多情况是要求能够传递null值的,比如多条件查询接口,为可复用一般可传null值。
3自动拆箱丶装箱
java5增加了自动装箱拆箱机智,提供基本数据类型和包装类型的相互转换操作。
3.1 自动装箱
自动装箱即自动将基本数据类型转换成包装类型。自动装箱的原理就是调用包装类的valueOf()方法。
Integer a = 1;
Integer a = Integer.valueOf(1);
3.2 自动拆箱
自动拆箱即自动将包装类型转换成基本数据类型,自动拆箱的原理就是调用包装类的 xxValue 方法
//自动拆箱 把上面装箱中的a赋值给b就是实现了自动拆箱功能
int b = a;
int b = a.intBalue();
4 注意
基本数据类型之间的相互转换不是都可以制动转换的,而你强制转换又会出问题,比如String类型的转换为int类型的,那么jdk为了方便用户就提供了相应的包装类。
// 例如String转为int
String aStr = 12;
int aInt = Integer.parseInt(aStr);
//但是也并非所有情况都可转为int,比如
String a= "hahaha";
int parseInt = Integer.parseInt(a);
//即报错类型转换错误。java.lang.NumberFormatException: For input string: "hahaha"
Integer缓存的陷阱
public class Test {
public static void main(String[] args) {
Integer n1 = 123;
Integer n2 = 123;
Integer n3 = 128;
Integer n4 = 128;
System.out.println(n1 == n2);
System.out.println(n3 == n4);
}
}
// 输出:true,false
//原因:Integer -128~127会放入缓存中,当值在此范围会从缓存中取,没有则new新对象,
//故n1==n2地址相同缓存中取,true,n3==n4超过范围new 新对象及不同地址。
ps:本文仅供个人学习和参考,无其他用途,有许多其他大神的文章摘录加之自己的些许理解,不正确的地方欢迎指出。