关于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包装类的自动装箱和拆箱规则,提供实例演示并解释编译器何时自动执行此操作。主要内容包括:装箱、拆箱的概念,自动装箱和拆箱的条件,以及相关代码示例。通过比较*.java文件与*.class文件,直观展示编译器如何处理自动装箱与拆箱。
363

被折叠的 条评论
为什么被折叠?



