Java自动装箱和拆箱

将原始数据类型自动转换为其等效的包装器类型的操作称为装箱, 而相反的操作称为拆箱。这是Java5的新功能。因此, java程序员无需编写转换代码。
自动装箱和拆箱的优势

不需要手动在原语和包装器之间进行转换, 因此需要的编码量更少。
Java自动装箱的简单示例:
class BoxingExample1{ public static void main(String args[]){ int a=50; Integer a2=new Integer(a); //BoxingInteger a3=5; //BoxingSystem.out.println(a2+" "+a3); } }

立即测试
Output:50 5

Java中取消装箱的简单示例:
包装器类类型自动转换为相应的原始类型, 称为拆箱。让我们看一下拆箱的例子:
class UnboxingExample1{ public static void main(String args[]){ Integer i=new Integer(50); int a=i; System.out.println(a); } }

【Java自动装箱和拆箱】立即测试
输出:
50

使用比较运算符自动装箱和拆箱
可以使用比较运算符执行自动装箱。让我们看一下使用比较运算符进行装箱的示例:
class UnboxingExample2{ public static void main(String args[]){ Integer i=new Integer(50); if(i< 100){//unboxing internally System.out.println(i); } } }

立即测试
Output:50

具有方法重载的自动装箱和拆箱
在方法重载中, 可以执行装箱和拆箱。对于拳击方法重载, 有一些规则:扩展节拍拳击扩展节拍varargs拳击节拍varargs
1)自动装箱示例, 其中加宽击败拳击
如果有加宽和拳击的可能性, 加宽会击败拳击。
class Boxing1{ static void m(int i){System.out.println("int"); } static void m(Integer i){System.out.println("Integer"); }public static void main(String args[]){ short s=30; m(s); } }

立即测试
Output:int

2)自动装箱示例, 变宽击败可变参数
如果有可能扩大和varargs, 扩大击败var-args。
class Boxing2{ static void m(int i, int i2){System.out.println("int int"); } static void m(Integer... i){System.out.println("Integer..."); }public static void main(String args[]){ short s1=30, s2=40; m(s1, s2); } }

立即测试
Output:int int

3)自动拳击的例子, 其中拳击胜过可变参数
让我们看一下拳击胜过可变参数的程序:
class Boxing3{ static void m(Integer i){System.out.println("Integer"); } static void m(Integer... i){System.out.println("Integer..."); }public static void main(String args[]){ int a=30; m(a); } }

立即测试
Output:Integer

方法重载与加宽和装箱
不能按照以下说明进行加宽和装箱:
class Boxing4{ static void m(Long l){System.out.println("Long"); }public static void main(String args[]){ int a=30; m(a); } }

立即测试
Output:Compile Time Error

    推荐阅读