为什么Java中有原始数据类型?

2022-09-04 05:37:46

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

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


答案 1

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

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

但是,这并不能解释为什么基元类型需要在 Java 编程语言中显式可见。Java语言和JVM的设计者可以选择隐藏语言本身的基元类型,这样你就可以把一切都当作一个对象。然后,编译器可以将其转换为更有效的基元类型。

在JVM上运行的一些较新的编程语言(Groovy,Scala等)可以让你做到这一点:在语言本身中,一切都看起来像一个对象,例如你可以调用方法,但是在封面下面,编译器将它们转换为基元。

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


答案 2

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