为什么java中的数据类型不是对象?

时间:2012-03-17 09:39:39

标签: java oop

我之前研究过java数据类型,发现它们是原始类型。因为java是面向对象的,但它的数据类型不是。为什么会这样?

5 个答案:

答案 0 :(得分:3)

处理原始类型比使每个变量成为完全成熟的对象更有效。最常见的类型(即int,char,float等)是简单的原语。其余的都是对象。

答案 1 :(得分:3)

据说Java中的所有内容都是一个Object,同时Java编程语言也很简单。由于原始数据类型消耗更少的内存并且可以更快地访问,因此它们不是对象。等效的Wrapper类也可以在java中使用,例如" Integer" "短"如果你愿意,它们可以用作对象。但是,包装器类将存储在Heap中并且它们很慢。

答案 2 :(得分:2)

在Java中,所有的Object类型都可以根据基元和对象的引用来定义。

原始类型和引用是无法根据其他类型定义的类型。

某些语言所做的是隐藏这种区别,这有效地使基本类型更高级别,如果他们对差异不感兴趣,可以使开发人员生活更轻松,但如果他们更加困难则更难。

很少有真正的语言是纯面向对象的,纯函数式或纯逻辑语言,你必须有许多实用的选择来使语言可用。

答案 3 :(得分:1)

这是两件事的组合。

  1. 这是一种语言设计偏好/选择。 Java语言设计者清楚地认为原语与对象不同......数组类型与类不同。在这种观点中,他们并不孤单。许多其他OO语言设计都有这种区别。

  2. 在制作数字类型完整对象类型等基本类型时会受到惩罚。

  3. Jesper指出(在另一个答案的评论中)某些语言将OO数字类型映射到封面下的硬件支持类型。但是,他没有提到只有在对它们施加限制时才能使用。您只能对编译器已知的数字类型和叶类型执行此操作。

    如果数字类型不是叶子类型,那么它可以表示为本机类型。如果是,那么就没有办法实现这个:

      class MyInteger extends Integer /* a builtin numeric type */ {
          public ... add(...) { /* a different way of doing addition */ }
      }
    

    为什么呢?因为内置类型表示为本机硬件整数类型,并且您无法对此类表示进行调度。

    简而言之, 要么 OO数字(等)类型很慢并且使用的等效Java原语类型的内存更多,它们受到限制这限制了你利用类型的OO-ness的能力。

答案 4 :(得分:0)

性能和内存消耗是原始数据类型背后的好理由,而不是使用完整的成熟对象。