首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的原语类型

Java中的原语类型
EN

Stack Overflow用户
提问于 2010-07-16 00:56:31
回答 4查看 1.7K关注 0票数 1

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-16 01:07:26

你的问题是反向的。原始类型比它们的包装器更基本。

实际上,包装器为您提供的唯一有用的功能是能够将其视为Object的子类(以便可以将其放入集合中,等等)。所有真正有用的东西(比如算术和排序)都是由原语类型提供的。

请注意,虽然您可以这样说:

代码语言:javascript
运行
复制
Integer i = Integer.valueOf(4);
Integer j = Integer.valueOf(2);
Integer k = i + j;

这只是一种便利。在下面,最后一行类似于:

代码语言:javascript
运行
复制
Integer k = Integer.valueOf(i.intValue() + j.intValue());

以便在原始值上进行算术运算。(这种便利性称为装箱/取消装箱。)这会带来性能损失,所以在我的机器上,这个循环:

代码语言:javascript
运行
复制
for (int i=0; i<10000000; i++) { }

大约比这个循环快10倍:

代码语言:javascript
运行
复制
for (Integer i=0; i<10000000; i++) { }
票数 9
EN

Stack Overflow用户

发布于 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[]多得多。

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

票数 1
EN

Stack Overflow用户

发布于 2010-07-16 01:09:32

性能,原语类映射到处理器,而不需要经历那么多的操作。

在布尔型、整型和浮点型的情况下,您可以使它们成为易失性的,并确保它们不需要同步(读取和写入是原子的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3257967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档