Java自动拆装箱以及128陷阱

装箱:

        把基本类型转换为包装类的过程就是装箱

拆箱:

        把包装类转换为基本数据类型就是拆箱

自动拆装箱

在JavaSE5中,为了减少开发人员的工作,Java提供了自动拆装箱功能

        自动装箱:

                将基本数据类型自动转化为对应的包装类

        自动拆箱:

                将包装类自动转化成对应的基本数据类型

自动拆装箱的实现原理

  •         自动装箱都是通过包装类的valueOf方法实现的
  •         自动装箱都是通过包装类对象xxxValue方法实现的(如intValue)

自动拆装箱使用场景

        1.将基本类型放入集合类
                集合类中都是对象类型,但是我们add(基本数据类型)也不会报错,是因为Java给我们做了自动装箱

        2.包装类型和基本类型比较大小
                包装类与基本数据类型进行比较运算,先将包装类进行拆箱成基本数据类型,然后比较

        3.包装类型的运算
                对两个包装类型进行运算,会将包装类型自动拆箱为基本类型进行

        4.三目运算符的使用

自动拆装箱与缓存

在Java SE5中,Integer操作引入了新功能来节省内存和提高性能

        1.适用于整数区间-128~+127

        2.只适用于自动装箱,使用构造函数创建对象不适用

        3.只适用于整形,浮点型不行

什么时128陷阱

两个Integer对象用==判定时,存在一个cache数组,存储-128~127,当两个对象位于-128~127之间时返回true。否则new新的内存空间,返回false。

自动拆装箱带来的问题

        1.包装对象之间的数值比较不能简单的使用==,除了特殊情况(如Integer的-128~127),其他比较都需要使用equals比较

        2.如果包装类对象为NULL,那么自动拆箱就可能会抛出NPE

        3.如果一个for循环中有大量拆装箱操作,会浪费很多资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值