java中的装箱和拆箱_Java中的自动装箱和拆箱

4c7fe130b5d7c9264aedb28d96d6349b.png

Java中的自动装箱和拆箱

Java从1.5开始添加了自动装箱与拆箱的机制,可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。

自动装箱和拆箱

什么是装箱和拆箱?

装箱是基本类型转换成对应的包装类型,拆箱是包装类型转为对应的基本类型。举个例子:

b5a306ed981ca366380b44193bceeee3.png

装箱和拆箱

对于Java的自动装箱和拆箱,我们看看源码编译后的class文件,其实装箱调用包装类的valueOf方法,拆箱调用的是xxxValue方法,下面就是变编译后的代码:

03e2574a07f63c3d4cff85f3150f532f.png

编译后的代码

Java中的八种基本类型对应的包装类型的自动装箱和拆箱,每种包装类型都定义了2个方法valueOf装箱方法和xxxValue拆箱方法。

edd2338d3ac1ec6195f01e059a5852e1.png

八种类型的装箱和拆箱

何时装箱和拆箱

上面说过赋值时会自动装箱和拆箱,还有其他情况:进行 = 赋值操作(装箱或拆箱)

进行+,-,*,/混合运算 (拆箱)

进行>,

调用equals进行比较(装箱)

方法调用时(装箱或者拆箱)

ArrayList,HashMap等集合类 添加基础类型数据时(装箱)

我们看看其中的比较运算,写一段代码并反编译一下看看:

ec6a87bf455b45f6178ae38ed52ba402.png

方法调用和比较运算符

编译结果,在调用的时候发生了装箱,在运算符比较的时候发生了拆箱。

eb17b406457fa12282ad3adc69a70190.png

方法调用

方法重载中的装箱和拆箱

在方法调用的时候,会发生自动装箱和拆箱,但是在方法重载的时候就可能不会装箱和拆箱,在方法重写的时候也一样,有时间可以自己试一试。

cff6d6b0d0aa2f85cf8228a3d34a7876.png

重载中的拆箱和装箱

拆箱中的空指针

在做拆箱时要小心空指针异常,因为拆箱的时候会调用包装对象的xxxValue方法。

d08de39727c80562ec712c2478ce367c.png

测试空指针

测试结果,发生了空指针异常。

172ad3fd63026888d155139536eda2c6.png

空指针异常

在这篇文章中我们说了Integer中的缓存问题,也是面试常问的面试题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值