JAVA——包装类的自动装箱和拆箱

关于JAVA的包装类自动拆箱和装箱,有很多人做过介绍,但笔者发现说的不够简洁,而这个问题在面试、笔试中又经常涉及,故笔者将搜集到的信息与大家分享下:

包装类(原始类型对应的类,即Boolean, Byte, Short, Integer, Long, Float, Double, Character)的自动拆、装箱分别是指如下的过程:

装箱:是指基本类型变为相应包装类的过程,如Integer a=Integer.valueOf(100);或者int a=100;Integer b=new Integer(a);这里的Integer.valueOf(100)和new Integer(a)就是装箱,由基本数据类型构造出一个包装类的对象。

拆箱:就是装箱的逆过程。如Integer a=new Integer(100);int b=a.intValue();这里的a.intValue()就是拆箱的过程,由一个包装类对象转换到相应的基本数据类型。

自动装箱、拆箱:指编译器帮助开发人员完成包装类的装箱和拆箱过程,也就是在将*.java文件编译成*.class文件的过程中完成。本文的目的是要介绍一下,编译器在何时才进行自动装箱、拆箱

包装类的自动装箱和拆箱规则如下:

  • 遇到赋值运算符“=”(包括传参数,参数传递属于隐式赋值)时,会将包装类拆箱装箱为相应类型
  • 遇到算术运算符、位运算符和位移运算符“+, ++, --, -, *, /, %, &, |, ^, ~, <<, >>, >>>”时,对包装类进行拆箱
  • 遇到关系运算符">, <, >=, <="(不包括“==”和“!=”哦)时,对包装类进行拆箱
  • 对关系运算符"==, !="而言,遇到数字常量算术表达式时,才对包装类进行拆箱
其余情况下,不进行自动的装箱和拆箱,注意啊,这里说的是自动装箱和拆箱。
对照上述的规则,来看几个例子吧。这里分别给出*.java文件里的代码和*.class文件里的代码,后者是编译器进行自动装箱和拆箱后的结果,读者可以对比两张图片的内容来加深理解。这里就不再累述了。

 

图1 *.java文件里的内容
  
 图2  *.class文件里的内容


值得一提的是, 包装类的equals方法不支持数据类型的自动转换。例如Integer类的equals方法是这样的:



本文采用的实验环境是jdk1.7.0_21。如有错误,还请指正,非常感谢。得意

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值