📅  最后修改于: 2020-10-13 06:54:08             🧑  作者: Mango
将原始数据类型自动转换为其等效的包装器类型的操作称为装箱,而相反的操作称为拆箱。这是Java5的新功能。因此,java程序员无需编写转换代码。
无需手动在基元和Wrappers之间进行转换,因此所需的编码较少。
class BoxingExample1{
public static void main(String args[]){
int a=50;
Integer a2=new Integer(a);//Boxing
Integer a3=5;//Boxing
System.out.println(a2+" "+a3);
}
}
Output:50 5
包装器类类型自动转换为相应的原始类型,称为拆箱。让我们看一下拆箱的例子:
class UnboxingExample1{
public static void main(String args[]){
Integer i=new Integer(50);
int a=i;
System.out.println(a);
}
}
输出:
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
如果有加宽和拳击的可能性,加宽会击败拳击。
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
如果可能扩大和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
让我们看一下拳击胜过可变参数的程序:
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