【问题标题】:Why are there wrapper classes in Java? [duplicate]为什么Java中有包装类? [复制]
【发布时间】:2011-04-04 11:44:46
【问题描述】:

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

但是,为什么我们首先需要 Wrapper 类?为什么不简单地使用我们拥有的原始类型呢?

【问题讨论】:

标签: java


【解决方案1】:

包装类:

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

  2. 有时需要创建这些对象的对象表示 原始类型。

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

  4. 为了满足这一需求,java 提供了对应于每个原始类型的类。基本上,这些类封装或包装类中的原始类型。

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

  6. 包装器类型有字节、短整型、整型、长整型、字符型、 布尔型、双精度型、浮点型。

【讨论】:

    【解决方案2】:

    您可以使用 Number 对象而不是原语的三个原因:

    1. 作为期望对象的方法的参数(通常在 操纵数字集合)。
    2. 使用类定义的常量,例如 MIN_VALUE 和 MAX_VALUE,提供数据类型的上限和下限。
    3. 使用类方法将值与其他值相互转换 原始类型,用于在字符串之间进行转换,以及 数字系统之间的转换(十进制,八进制,十六进制, 二进制)。

    来源:

    The Numbers Classes

    【讨论】:

    • 我没有得到第 2 项。无论如何,你不应该使用像 i.MAX_VALUE 这样的东西。此外,MIN_VALUE / MAX_VALUE 常量属于原始类型
    【解决方案3】:

    包装类用于将任何原始类型转换为对象。原始数据类型不是对象,它们不属于任何类,它们是在语言本身中定义的。在只支持对象的数据结构中存储时,需要先将原始类型转换为对象,所以我们选择包装类。

    【讨论】:

      【解决方案4】:

      Java 是一种面向对象的语言,正如前面所说,Java 中的一切都是 一个东西。但是原始人呢?他们有点被排除在外 对象的世界,即它们不能参与到对象中 活动,例如从方法作为对象返回,以及 被添加到对象集合等中。作为对此的解决方案 问题,Java 允许您将原语包含在 通过使用所谓的包装类来创建对象。

      【讨论】:

      • 你自己引用吗?
      【解决方案5】:

      Java 是一种面向对象的编程语言。我想你也可以问 - 为什么我们有原语,为什么一切都不只是一个对象?

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

      【讨论】:

      • 加 1 表示 >我想你也可以问 - 为什么我们有原语,为什么一切都不仅仅是一个对象?
      • 为什么我们需要多态中的包装类?你能提供一个例子吗@samitgaur
      【解决方案6】:

      我想到的一个务实的原因是对象可以为空,而基元不能*。如果我不能确保一个函数可以返回一个 int,那么使用包装器是处理获得我期望的 int 的唯一方法。自动装箱负责其余的工作。

      【讨论】:

        【解决方案7】:

        在集合中使用包装器的示例,您可以使用 ArrayList<Integer>,但不能使用 ArrayList<int>HashMaps 等。为了获得类型安全,我们使用泛型,泛型需要对象而不是基元.

        【讨论】:

        • 泛型是在包装类 (JDK1.1) 之后很久才引入的。
        【解决方案8】:

        当需要一个 Object 时,使用包装类而不是原始类型。

        例如,在集合中,ArrayList 可能包含 Object 的任何子类的实例,但由于原始类型不是 Object,它们不能包含在 ArrayList 中。

        【讨论】:

          【解决方案9】:

          几个可能的原因:

          • 这样一个空值是可能的
          • 包含在集合中
          • 将一般性/多态性视为一个对象以及其他对象

          【讨论】:

          • 在代码中保留简单的语法,并允许将有用的静态辅助方法放在直观的位置。
          • Double.compare 就是很好的例子
          猜你喜欢
          • 1970-01-01
          • 2011-01-09
          • 2021-11-11
          • 2017-11-28
          • 2011-06-10
          • 2013-01-06
          • 2016-01-18
          • 1970-01-01
          • 2021-08-09
          相关资源
          最近更新 更多