【问题标题】:Primitive vs Object type in Java [duplicate]Java中的原始与对象类型[重复]
【发布时间】:2013-08-20 11:18:23
【问题描述】:

我想到这个问题是因为我在某处读到 Java 不是纯面向对象的语言,因为它使用原语(不是对象)。我可以同意。现在我的问题是为什么我们使用 primitives/wrappers 而我们已经拥有相同类型的 Object?

例如,如果我们考虑Integer,除了对象行为之外,它与int 具有相同的值限制。为什么 Java 在这种情况下仍然使用primitives

在我看来,如果 Java 只使用 Object 类型 Autoboxing and Unboxing 没有必要。顺便说一句,String 也没有原语。

【问题讨论】:

  • 这是一个讨论问题,这使得它脱离了 StackOverflow 的主题。
  • @Anony-Mousse 有一个更支持 Java 的观点:C 被编译成静态机器代码,而 Java 在运行时被分析和优化。许多 JIT 优化无法提前完成。因此,在某些用例中,Java 模型实际上可以击败 C。
  • @Ruchira 今天它主要归结为遗产。给定足够智能的运行时,Integer 可以在内部优化为原语int。但是,Java 设计者不敢指望存在如此智能的运行时,而且可能是正确的。

标签: java object primitive


【解决方案1】:

一个原因是由于内存使用。与至少 8 个字节的对象相比,intfloat 等基元需要更少的内存分配(我认为是 4 个字节)。请看以下reference

此外,许多算术(数字)是通过使用原语而不是它们的等价物来完成的,这也是它们在 Java 语言中非常重要的另一个原因。

【讨论】:

  • 为什么 String 没有原语?
  • 因为字符串不是 CPU 的原始类型。在某种程度上,字符是。与char[] 相比,String 对象的开销可以忽略不计。
  • 在 Hotspot 中,Integer 需要 16 个字节。 int 是 4 个字节。它们也确实具有相同的语义,因为Integer 可以是nullint 不能。
  • @Anony-Mousse char[] 不亚于String 是一个对象。 Java 没有数组值变量。
  • @MikkelLøkke char 不是 String 的原始类型
猜你喜欢
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 2017-01-23
  • 2018-06-12
  • 2016-03-30
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
相关资源
最近更新 更多