【问题标题】:What is difference between wrapper and Auto Boxing/Unboxing in java?java中的包装器和自动装箱/拆箱有什么区别?
【发布时间】:2015-12-09 07:46:02
【问题描述】:

Wrapper 类用于将基元转换为对象,将对象转换为基元。同样,通过使用 AutoboxingUnboxing 我们可以做同样的事情,那么这两者有什么区别: 1-概念明智 2-代码明智???

【问题讨论】:

  • 它们是两个相关但不同的概念。在语言形式中,一个是主语,另一个是动词。
  • 对于 java - AutoboxingUnboxing 出现,因为我们有原始的包装器。如果没有包装类,原语会装到什么位置?
  • @Kayaman 你介意用英语解释一下吗?
  • @VinodMadyalkar 谢谢!我能从你那里得到更清楚的想法吗?

标签: java boxing unboxing


【解决方案1】:

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

例如,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

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

【讨论】:

  • 成功了!非常清晰,帮助了我。谢谢安德烈亚斯
【解决方案2】:

Autoboxing 是 Java 编译器在基本类型与其对应的对象包装类之间进行的自动转换。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。如果转换以另一种方式进行,则称为unboxing

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

 Character ch = 'a';

wrapper 类提供了一种将原始值“包装”在对象中的机制,以便原始值可以仅包含在对象的活动中,例如添加到集合中。 Java 中的每个原语都有一个包装类。 int 的包装类是 Integer,float 的类是 Float,依此类推。 Wrapper 类还为 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会自动为您创建一个对象,这称为自动装箱

 Long weight = 1200L;

包装类有很多实用函数,主要用于以下转换:

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

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

【讨论】:

  • 谢谢先生混乱清除!很好的解释,感谢您以比其他 Java 大神更简单的方式回答它
【解决方案3】:

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 做同样的事情,只是你不需要编写转换代码。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2015-02-23
    • 1970-01-01
    • 2012-06-20
    • 2018-06-20
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多