📜  Java4/5 Autoboxing

📅  最后修改于: 2020-10-13 06:54:08             🧑  作者: Mango

自动装箱和拆箱:

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

自动装箱和拆箱的优势:

无需手动在基元和Wrappers之间进行转换,因此所需的编码较少。

Java自动装箱的简单示例:

  
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

在Java中取消装箱的简单示例:

包装器类类型自动转换为相应的原始类型,称为拆箱。让我们看一下拆箱的例子:

  
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

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