Java中的原语与对象类型
我之所以想到这个问题,是因为我在某个地方读到,Java不是一种纯粹的面向对象语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是为什么我们使用Java中的原语与对象类型,java,object,primitive,Java,Object,Primitive,我之所以想到这个问题,是因为我在某个地方读到,Java不是一种纯粹的面向对象语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是为什么我们使用原语/包装器,而我们已经有了相同类型的对象 例如,如果我们考虑整数< /代码>,除了对象行为之外,它具有与 int >代码相同的值限制。为什么Java在这些条件下仍然使用原语 在我看来,如果Java只使用对象类型就没有必要了。顺便说一下,字符串也没有原语 一个原因是内存使用。与至少为8字节的对象相比,诸如int、float等基本体需要更少的内
原语/包装器
,而我们已经有了相同类型的对象
例如,如果我们考虑<代码>整数< /代码>,除了对象行为之外,它具有与<代码> int >代码相同的值限制。为什么Java在这些条件下仍然使用原语
在我看来,如果Java只使用对象类型就没有必要了。顺便说一下,字符串也没有原语 一个原因是内存使用。与至少为8字节的对象相比,诸如
int
、float
等基本体需要更少的内存分配(我认为是4字节)。请参见以下内容:
此外,许多算术(数值)都是通过使用原语而不是它们的对象等价物来完成的,这也是它们在Java语言中非常重要的另一个原因 相关:请参阅:这是一个讨论问题,这使它脱离了StackOverflow的主题。@Anony Mouse有一个更倾向于Java的观点:C被编译成静态机器代码,而Java在运行时被分析和优化。许多JIT优化不可能提前完成。因此,在一些用例中,Java模型实际上可以击败C.@Ruchira,而今天,这主要归结于传统。一个
整数
可以在内部优化为一个基本int
,只要运行时足够智能。但是,Java设计人员不敢相信这种足够智能的运行时的存在,这可能是正确的。那么为什么字符串没有基元呢?因为字符串不是CPU的基元类型。从某种程度上说,字符是一种符号。与char[]
对象相比,String
对象的开销是可忽略的。在Hotspot中,整数需要16字节。int
是4个字节。它们的语义也不相同,因为整数可以是null
,而int
不能。@Anony Moussechar[]
与其说是字符串,不如说是对象。Java没有数组值变量。@MikkelLøkke char不是字符串的基本类型