【问题标题】:Coexistance of primitve and reference data types in JavaJava中原始数据类型和引用数据类型的共存
【发布时间】:2015-03-05 11:14:28
【问题描述】:

我总是问自己这个问题:为什么 Java 设计者在他们的语言中同时引入了原始类型和引用类型。换句话说,为什么会存在两种可以实现相同目标的数据类型,例如 (int & java.lang.Integer)、(float & java.lang.Float) ... 谁能解释一下这个问题?

【问题讨论】:

    标签: java types primitive-types


    【解决方案1】:

    Java 有原语,因为:

    1. 他们很快。 (与对象相比)
    2. 它们的开销更少。 (与对象相比)
    3. 它们实际上让具有 C/C++ 背景的人的生活更轻松,并赋予他们相同的感觉(几乎)。

    Java 有包装器,因为:

    1. 在某些数据结构(如 Collections)中,只允许添加对象,因为在进行垃圾收集时,GC 仅将所有这些事物视为对象,然后执行操作 在他们身上。

    2. Collections 中使用包装器(对象)而不是 primitives 更多的是一种设计选择,因为它允许 一般行为 方法。例如 equals()contains() 在集合上工作 方法覆盖的基础,这不能在原语上完成。

    【讨论】:

      【解决方案2】:

      基元比引用类型更快(在小循环中几乎不明显,但在大型操作中,差异很明显),使具有 c/c++ 背景的人更容易阅读代码,并且通常更适合于具有基本类型的通用操作。

      但考虑到 Java 的某些部分(集合、泛型、反射...)需要类而不是基本类型,因此为此添加了包装器(加上装箱和拆箱)。此外,包装器可以为空,而基本类型则不能,这在某些操作中也可能需要。

      【讨论】:

        猜你喜欢
        • 2016-01-21
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2018-03-29
        相关资源
        最近更新 更多