【发布时间】: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 设计者不敢指望存在如此智能的运行时,而且可能是正确的。