自动拆箱装箱笔记

前言:

Java是一个面向对象的语言,而Java中的基本数据类型不是面向对象的,这在实际使用时存在很多不便。比如:我们在使用带有泛型的类时,如果你把int放到泛型中会提示出错。需要将基本类型转成包装类型。

在这里插入图片描述 包装类型:

就是把基本类型进行包装成一个对象,在英文中就是boxing(装箱)的意思。在JavaSE5中,为了减少开发人员的工作,Java提供了自动拆箱与自动装箱的功能。自动装箱:将基本类型自动转成对应的包装类。自动拆箱:将包装类自动转换成对应的基本数据类型。

使用注意点:

虽然包装类自动装箱和拆箱很方便,但当我们拿到一个包装类对象去做运算或判断时,是需要去校验当前包装对象是否为null。如果你用为null的对象去和其他基本数据类型去做运算就会报错NPE,同理,你用null去做判断大小或者其他逻辑也是会报错的。

缓存:

当程序自动装箱时会调用valueOf方法。
在这里插入图片描述可以看到代码中Integer类会有一个IntegerCache缓存类,类中有一个数组,数组中的值默认大小范围是在 -128~127。如果当前传入的值是在这个范围内,那么就不会去new Integer的。网上虽然说当一个Integer的对象值是在这个范围时,是可以直接用== 来比较的,但是现在在编译是用== 来比较2个包装类型是会提示错误的
在这里插入图片描述
所以我们最好还是用equals去判断是否相等。

扩展:

阿里规范手册中也有对包装类使用有一些说明,大概就是,int 类型不能接收数据库中可能查出来的null。PRC接口中的返回内容中null也是具有一定的业务逻辑意义,可能就是程序出错直接返回null,我们也能第一时间观察到null值并做出处理。NPE的操作都是有使用者来保证的,而不能是程序的默认处理。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值