为什么在java中使用原语类型而不是包装器类?我想知道我们在java中已经有了包装器类,那么为什么我们还需要使用原始类型呢?原语类型在java中的重要性是什么?
发布于 2010-07-16 01:07:26
你的问题是反向的。原始类型比它们的包装器更基本。
实际上,包装器为您提供的唯一有用的功能是能够将其视为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++) { }
发布于 2010-07-16 01:39:25
在Java中,每个对象都有一些空间开销。这取决于JVM,以及目标体系结构上的“字”的大小(64位与32位),但我通常估计每个对象有大约40字节的“开销”,超出其字段所需的“开销”。
例如,一个1024字节的数组是一个对象,有40个字节的开销;它有一个length
成员(一个int
),需要4个字节,每个元素需要1个字节,总共大约1k。
一个包含1024个Byte
实例的数组具有数组本身及其length
成员的开销,然后每个Byte
实例大约有41个字节的开销(40个字节的开销加上1个字节的数据)。总共超过了41k!比原始的byte[]
多得多。
由于包装器类型是不可变的,因此有人建议使用一些巧妙的技巧来使原始数据看起来像包装的对象实例,但到目前为止,这些机制都还没有实现。
发布于 2010-07-16 01:09:32
性能,原语类映射到处理器,而不需要经历那么多的操作。
在布尔型、整型和浮点型的情况下,您可以使它们成为易失性的,并确保它们不需要同步(读取和写入是原子的)
https://stackoverflow.com/questions/3257967
复制相似问题