java中的包装器和Auto Boxing / Unboxing有什么区别?

时间:2015-12-09 07:46:02

标签: java boxing unboxing

Wrapper类用于将基元转换为对象,将对象转换为基元。同样地,通过使用AutoboxingUnboxing我们可以做同样的事情,然后这两者有什么不同: 1-Concept明智 2-Code wise ???

3 个答案:

答案 0 :(得分:5)

自动装箱和自动拆箱只是编译器默默地帮助您创建和使用原始包装器对象。

例如,int基元类型具有名为Integer的包装类。你打包和解包如下:

int myInt = 7;

// Wrap the primitive value
Integer myWrappedInt = Integer.valueOf(myInt);

// Unwrap the value
int myOtherInt = myWrappedInt.intValue();

使用自动装箱和自动拆箱功能,您无需执行所有锅炉板操作:

int myInt = 7;

// Wrap the primitive value
Integer myWrappedInt = myInt; // Compiler auto-boxes

// Unwrap the value
int myOtherInt = myWrappedInt; // Compiler auto-unboxes

它只是一个语法糖,由编译器处理。生成的字节码是相同的。

答案 1 :(得分:1)

  

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。例如,将int转换为Integer,将double转换为Double,依此类推。如果转换采用另一种方式,则称为unboxing

以下是自动装箱的最简单示例:

 Character ch = 'a';
  

wrapper类提供了一种机制来“包装”对象中的原始值,以便原语可以包含在仅用于对象的活动中,例如添加到集合中。 Java中的每个原语都有一个包装类。 int的包装类是Integer,float的类是Float,依此类推。包装类还为诸如Integer.parseInt()的原语提供了许多实用程序功能。

创建包装器对象的三种最常用方法是:

<强> 1。使用构造函数

 Integer i1 = new Integer(42);

除了Character之外的所有包装类都提供了两个构造函数:一个采用基本类型,另一个采用基本类型的String表示:new Integer(42)或new Integer(“42”)。 Character类只提供一个构造函数,它将char作为参数:new Character('c')。

<强> 2。使用valueOf()作为

 Float f2 = Float.valueOf("3.14f");

第3。直接将基元分配给包装器引用,在这种情况下,java将自动为您创建一个对象,称为Autoboxing

 Long weight = 1200L;

包装类有许多实用程序函数,主要用于转换,如:

  double d4 = Double.parseDouble("3.14");

  Double d5 = Double.valueOf("3.14");

答案 2 :(得分:0)

java中的包装器类提供了一种将原语转换为对象并将对象转换为原语的机制。自动装箱和拆箱使您可以自动进行转换。自Java 5起,自动装箱和自动拆箱在Java中都是合法的。

public class Main {

    public static void main(String[] args) {
        int x=100;
        Integer iob;
        iob=x;//illegal upto JDK1.4
        iob= Integer.valueOf(x); //legal=> Boxing,Wrapping
        iob=x; //Legal since JDK1.5=> Auto Boxing

    }
}

这里x是原始变量, iob 是参考变量。因此,只能将一个地址分配给此IOB引用。 iob = Integer.valueOf(x)会将原始整数转换为整数对象。此转换可以隐含为包装。 iob = x 会做同样的事情。它还节省了很多编码。

public class Main {

    public static void main(String[] args) {
        Integer iob= new Integer(100);
        int x;

        x=iob;//illegal upto JDK1.4
        x=iob.intValue(); //unboxing,unwrapping

        x=iob; //legal since JDK1.5=> auto unboxing 

    }
}

此处 iob.intValue()将获取整数对象的值,并将该值分配给x。 x = iob 做同样的事情,除了您不需要编写转换代码。