java为什么要拆箱和装箱,在java中,什么是自动装箱和拆箱?

java语言从1.5之后,可以自动将原始类型与对象进行相互转换,不用编程转换,被称为自动装箱和拆箱。将原始类型转换为对象称为自动装箱,例如将int转换为Integer,将对象转换为原始类称为自动拆箱,例如将Integer转换为int。自动装箱和拆箱支持的原始类型和类有:byte和Byte ,char和Character,short和Short,int和Integer,long和Long,double和Double以及boolean和Boolean。

自动装箱和拆箱的原理

898083713868946f126b08ab7ee4b931.png

原理上,自动装箱时,调用了对应类的valueOf()方法,下面的两行代码,实际上是等价的:

Integer i = 1;

Integer i = Integer.valueOf(1);

在没有自动装箱特性时,只能使用第二种写法。

在自动拆箱时,实际调用了对象的xxxValue()方法。下面两段代码也是等价的:

Integer i = new Integer(1);

int j = i;

Integer i = new Integer(1);

int j = i.intValue();

在没有自动拆箱特性时,只能使用第二种写法。

自动装箱和拆箱的坑

自动装箱和拆箱可以简化代码的编写,不用工程师手动进行装箱和拆箱。当然,大家在享受这个方便的特性时,也要注意避免踩坑,给程序带来bug。

比较常见的问题是自动拆箱时,被拆的对象为null。原始类型在编写过程中都有初始值,没有初始值会被编译器检查出来,不能通过,所以一般情况下,自动装箱不存在没有初始值的情况。但是在拆箱时,被拆箱的对象有可能是null,这个时候进行拆箱,会抛出NullPointerException。因此,调用方法的参数是原始类型时,要特别注意,传递的对象是否为null。

另一个常见的问题是使用运算重载符时,会生成新的对象,如果在大量的循环中使用,会生成大量的临时对象,影响性能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值