为什么Java中需要包装类?

47
我知道什么是包装类,它们用于将基本类型(如int、double等)封装为其对应的对象。

但是,为什么我们需要包装类呢?为什么不直接使用基本类型呢?

1
请参见:https://dev59.com/S3I95IYBdhLWcg3w1BlN - AHungerArtist
9个回答

76

存在几个可能的原因:

  • 使得空值成为一种可能
  • 将其包含在集合中
  • 可以与其他对象一起被通用地/多态地对待,作为一个对象

1
然而,保留代码中易于理解的语法,并允许将有用的静态辅助方法放置在直观的位置。 - ellimilial
Double.compare是一个很好的例子。 - Akshay Joshi

20

包装器的使用示例是在集合中,您可以拥有一个 ArrayList<Integer>,但不是一个 ArrayList<int>,HashMap等也是如此。为了获得类型安全性,我们使用泛型,而泛型需要对象而不是基本类型。


4
泛型是在包装类(JDK1.1)之后引入的。 - user2418306

13

Java是一种面向对象的编程语言。我认为你也可以问-为什么我们有原始类型而不是每个东西都是一个对象?

Java设计者将这两者分开以保持简单。当您需要适合面向对象世界的类型(例如多态性、集合等)时,您使用包装器。当您需要效率时,则使用原始类型。


我认为你也可以问 - 为什么我们有原始类型,为什么不是所有东西都是对象?加1。 - Sagar
为什么在多态中我们需要包装类?你能给一个例子吗,@samitgaur - Mahender Reddy Yasa

8

当期望一个对象时,使用包装类而不是原始类型。

例如,在集合中,ArrayList 可以包含任何 Object 子类的实例,但是因为原始类型不是对象,所以不能包含在 ArrayList 中。


4

包装类用于将任何基本类型转换为对象。基本数据类型不是对象,它们不属于任何类,它们在语言本身中定义。当存储在仅支持对象的数据结构中时,需要先将基本类型转换为对象,因此我们使用包装类。


2

包装类:

  1. Java使用基本数据类型,如int、char、double等来保存语言支持的基本数据类型。

  2. 有时需要创建这些基本数据类型的对象表示。

  3. 这些是仅处理这些对象的集合类。需要将基本类型包装在一个类中。

  4. 为满足这个需求,Java提供了与每个基本类型对应的类。基本上,这些类封装或包装了类内的基本类型。

  5. 因此,它们通常被称为类型包装器。类型包装器是封装对象中的基本类型的类。

  6. 包装类型是Byte、Short、Integer、Long、Character、Boolean、Double和Float。


1
Java是一种面向对象的语言,正如所说的,Java中的所有内容都是一个对象。但是原始类型呢?它们似乎被忽略在对象的世界之外,也就是说,它们无法参与到对象的活动中,例如作为对象从方法中返回,或添加到对象的集合中等等。为了解决这个问题,Java允许您通过使用所谓的包装类将原始类型包含在对象家族中。

1
你会引用自己吗? - user2418306

1
有三个原因可能会使用Number对象而不是基本类型:
  1. 作为期望对象的方法的参数(在操作数字集合时通常使用)。
  2. 使用类定义的常量,例如MIN_VALUE和MAX_VALUE,提供数据类型的上下界。
  3. 使用类方法将值转换为其他基本类型,将值从其他基本类型转换为该类型,将值转换为字符串以及在十进制、八进制、十六进制和二进制之间进行转换。

来源:

数字类


1
我不理解第二项。你不应该使用像 i.MAX_VALUE 这样的东西。此外,MIN_VALUE / MAX_VALUE 常量是原始类型 - aioobe

0

我能够想到的一个实际的原因是对象可以为空,而基元类型则不行。如果我无法确保函数返回一个int类型的值,那么使用包装类型是获取我期望的int值的唯一方法。自动装箱会处理其余部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接