一个菜鸟的学习之路之基础-包装类

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:本文仅供个人学习和参考,无其他用途,有许多其他大神的文章摘录加之自己的些许理解,不正确的地方欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值