Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的原语与对象类型_Java_Object_Primitive - Fatal编程技术网

Java中的原语与对象类型

Java中的原语与对象类型,java,object,primitive,Java,Object,Primitive,我之所以想到这个问题,是因为我在某个地方读到,Java不是一种纯粹的面向对象语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是为什么我们使用原语/包装器,而我们已经有了相同类型的对象 例如,如果我们考虑整数< /代码>,除了对象行为之外,它具有与 int >代码相同的值限制。为什么Java在这些条件下仍然使用原语 在我看来,如果Java只使用对象类型就没有必要了。顺便说一下,字符串也没有原语 一个原因是内存使用。与至少为8字节的对象相比,诸如int、float等基本体需要更少的内

我之所以想到这个问题,是因为我在某个地方读到,Java不是一种纯粹的面向对象语言,因为它使用的是原语(不是对象)。我同意这一点。现在我的问题是为什么我们使用
原语/包装器
,而我们已经有了相同类型的对象

例如,如果我们考虑<代码>整数< /代码>,除了对象行为之外,它具有与<代码> 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 Mousse
char[]
与其说是
字符串,不如说是对象。Java没有数组值变量。@MikkelLøkke char不是字符串的基本类型