Java中的基元类型

为什么在java中使用原始类型而不是Wrapper类? 我想知道我们已经在java中有包装类,那么为什么我们需要使用原始类型? java中原始类型的重要性是什么?

你的问题是倒退的。 原始类型比它们的包装器更基础。

包装器给你的唯一有用的东西是能够被视为Object的子类(以便它们可以被放入集合中等等)。 所有真正有用的东西(比如算术和排序)都是由原始类型提供的。

请注意,虽然您可以说:

Integer i = Integer.valueOf(4); Integer j = Integer.valueOf(2); Integer k = i + j; 

这只是一个方便。 在下面,最后一行变成如下:

 Integer k = Integer.valueOf(i.intValue() + j.intValue()); 

以便算术发生在原始值上。 (这种便利性称为装箱/拆箱。)这会对性能造成损失,因此在我的机器上,这个循环:

 for (int i=0; i<10000000; i++) { } 

比这个循环快大约10倍:

 for (Integer i=0; i<10000000; i++) { } 

在Java中,每个对象都有一些空间开销。 它取决于JVM,以及目标体系结构中“字”的大小(64位与32位),但我通常估计每个对象的字节大约需要超过40字节的“开销”。 。

因此,例如,1024字节的数组是一个对象,具有40字节的开销; 它有一个length成员(一个int )需要4个字节,每个元素需要1个字节,总共大约1k。

1024 Byte实例的数组具有数组本身的开销,其length成员,然后每个Byte实例大约41个Byte (40字节的开销,加上1字节的数据)。 总共超过41k! 远远超过原始byte[]

由于包装器类型是不可变的,因此有一些巧妙的技巧可以使原始数据看起来像包装对象实例,但到目前为止,还没有实现这些机制。

性能,原始类映射到处理器而不必经历多个操作。
在boolean,int和float的情况下 – 您可以使它们变为volatile并确保它们不需要同步(读取和写入是primefaces的)

[幽默]为了节省打字! 这个:

  int i = 4; int j = 38; int k = i + j; 

类型比:

  Integer i = new Integer(4); Integer j = new Integer(38); Integer k = i + j; 

[/幽默]

实际上,其他答案说它比我更好。