为什么包装类概念来自Java?

时间:2015-03-24 10:40:16

标签: java core

我知道包装类是什么,它们将原始类型(例如int,double等)包装到它们各自类的对象中。

但我想知道一个可以解释我的Java代码示例。

使用包装器类和out包装类它将做什么。

4 个答案:

答案 0 :(得分:1)

当Java语言被“发明”时,人们认为原始类型为int,long,...会避免性能问题。 15年多以前,没有高效的JIT编译器;所以如果你必须创建10000个int的数组......或者10 000个Integer对象,它会产生很大的不同。

另一方面,Java希望成为面向对象的语言。因此,这些原始类型伴随着类。从某种意义上说,你是正确的:如果没有原始的tpyes,只有Integer,Long,......等等,Java类型系统将更加一致,更简单......但是在1997年这个简单的类型系统会在表现方面一直“昂贵”。不幸的是,人们没有考虑在字节码中允许原始类型......但是没有在Java语言本身中使用它们(以及编译器在内部将Integer转换为int)。

现在的主要用途是Java编译器进行自动装箱(基本和“基于对象”类型之间的自动转换);所以你可以写下这样的东西:

Map<Integer, String> someMap = ...
someMap.put(5, "string")

答案 1 :(得分:1)

包装类用于将任何数据类型转换为对象。原始数据类型不是对象;他们不属于任何阶级;它们是用语言本身定义的。有时,需要将数据类型转换为Java语言中的对象

什么是包装类?

包装器类包装或包含数据类型,并为其提供对象的外观。您还可以从对象中获取原始数据类型。

请注意以下示例。

 int x = 100;
    Integer iObj = new Integer(x); 

在Integer类的帮助下,int数据类型(x)被转换为对象(iObj)。这可以在需要对象时使用。

以下代码可用于解包对象iObj并获取原始数据类型。

int y = iObj.intValue();
System.out.println(y); // prints 100 

intValue()是Integer类的一种方法,它返回一个int数据类型。

为什么包装类?

将原始数据类型转换为对象,反之亦然。

答案 2 :(得分:0)

简单的一行答案可能是ArrayList<Integer>但你不能ArrayList<int>。它们用于集合,多态等。所以我认为Java设计人员希望简化它们,这就是他们使用包装类概念的原因。

  

Java是一种面向对象的语言,就像java中所说的那样   一个东西。但原始人呢?他们有点被遗忘了   物体的世界,也就是说,它们不能参与物体   活动,例如从作为对象的方法返回,以及   被添加到对象集合等。作为解决方案   问题,Java允许您在基类中包含基元   对象使用所谓的包装类。

答案 3 :(得分:0)

Java中存在包装类型主要有两个原因:

  • 允许以面向对象的方式进行类型转换
  • 所有Collection类型都使用泛型java对象,因此如果您需要List of,例如浮点数,则不能使用简单的float数字,因为它们不是对象。此外,它们不继承自java.lang.Object

因此,您可以拥有ArrayList<Integer>,因为Integer从Object扩展(与JVM中的每个其他对象一样)。但是你不能拥有一个ArrayList,因为int不是一个对象类型:它只是一个简单的int变量,没有方法,实例变量等。

从Java 1.5开始,你就会在其对应的包装器类型中自动装箱取消装箱原始类型,这会让一切变得更加混乱。考虑一下这个清单:

List list = new ArrayList<Integer>()

list.add(new Integer(10))
list.add(20)

在这里您可以看到此列表仅使用Integer对象。在最后一行中,编译器将简单值20放在新的Integer对象中以节省一些输入。这是一个小的语法糖,但这个想法仍然存在:list只能使用Integer个对象。