可能重复:
When we have wrappers classes, why primitives are supported?
如果存在使Java纯面向对象语言的Wrapper类,那么为什么有可以在Java中使用的Primitive数据类型???
答案 0 :(得分:17)
为了提高效率。原始类型的变量直接包含值;非基本类型的变量是引用,指的是存储在内存中其他位置的对象。
每次需要使用包装器类型的值时,JVM都需要在内存中查找对象以获取该值。原始类型不需要这样做,因为变量包含值本身,而不是对包含该值的对象的引用。
然而,这并不能解释为什么原始类型需要在Java编程语言中明确可见。 Java语言和JVM的设计者可以选择隐藏语言本身的原始类型,这样您就可以将所有内容视为对象;然后,编译器可以将它翻译成更有效的原始类型。
在JVM上运行的一些较新的编程语言(Groovy,Scala和其他语言)可以让你做到这一点:在语言本身中,所有东西看起来都像一个对象,你可以在其上调用方法,但是在编译器的下面将它们翻译成原语。
我想在Java语言开发的时候(在1990年代上半期),人们并没有想到这一点,现在为时已经太晚了,无法彻底改变在语言中允许这样做。
答案 1 :(得分:3)
原始数据类型存在的主要原因是,创建对象,分配堆的成本太高,并且存在性能损失。您可能知道最常用的原始数据类型如int,float等,因此将它们作为对象会受到巨大的性能影响。所以Java设计者认为将它作为非对象更好。 是的,包装器存在以防万一你准备在性能上妥协,但你需要更多的OOP设施。所以在这种情况下你可以使用包装器。希望这些信息对您有所帮助。
答案 2 :(得分:2)
出于性能原因。在其他一些语言中,像SmallTalk这样的类型(如int或char)也是对象,可以在它们上调用这些方法。这在理论上更正确,但当前的实现运行速度较慢。原始类型是纯度和性能之间的折衷。
如果需要更多(可能为null值或与集合框架一起使用),Java提供了包装类,如java.lang.Integer和类似的。