为什么Java中有Primitive数据类型?

可能重复:
当我们有包装类时,为什么支持原语?

如果有Wrapper类使Java纯面向对象语言,那么为什么有可以在Java中使用的Primitive数据类型???

为了效率。 原始类型的变量直接包含值; 非基本类型的变量是引用,指的是存储在内存中其他位置的对象。

每次需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。 原始类型不需要这样,因为变量包含值本身,而不是对包含该值的对象的引用。

但是,这并不能解释为什么原始类型需要在Java编程语言中明确可见。 Java语言和JVM的设计者可以选择隐藏语言本身的原始类型,以便您可以将所有内容视为对象; 然后编译器可以将它翻译成更有效的原始类型。

一些在JVM上运行的新编程语言(Groovy,Scala和其他语言)可以让你做到这一点:在语言本身中,所有东西看起来都像一个对象,你可以在其上调用方法,但是编译器将它们转换为原语。

我想在Java语言开发的时候(1990年代上半期),人们并没有想到这一点,现在为了彻底改变语言,为时已晚。

原始数据类型存在的主要原因是,创建对象,分配堆的成本太高,并且存在性能损失。 您可能知道最常用的原始数据类型如int,float等,因此将它们作为对象会受到巨大的性能影响。 所以Java设计者认为将它作为非对象更好。 是的,包装器存在,以防你准备妥协性能,但你需要更多的OOP设施。 所以在这种情况下你可以使用包装器。 希望这些信息可以帮助您。

出于性能原因。 在其他一些语言中,像int或char之类的SmallTalk类型也是对象,可以在它们上调用方法。 这在理论上更正确,但当前的实现运行速度较慢。 原始类型是纯度和性能之间的折衷。

如果需要更多(可能为null值或与集合框架一起使用),Java提供了类似java.lang.Integer等包装类。