【发布时间】:2010-01-14 19:37:30
【问题描述】:
我们在 java 中有包装类,例如 Interger、Float.. 为什么它仍然支持阻止 java 成为完全面向对象的语言的ng原语?
【问题讨论】:
标签: java
我们在 java 中有包装类,例如 Interger、Float.. 为什么它仍然支持阻止 java 成为完全面向对象的语言的ng原语?
【问题讨论】:
标签: java
包装器,作为对象,被放置在堆中。基元只是“值”并进入堆栈。这更有效,因为对于堆中的包装原语,您(至少)需要值(在堆栈中)和对包装器对象的引用。
这种性能提升是否重要取决于您在做什么。对于繁重的数值工作,肯定是这样,但对于 99% 的东西来说,这是相当烦人的。一方面,您无论如何都不能将原语存储在 Collection 中;他们被自动装箱。因此,存储大量它们的唯一方法是使用普通数组,这反过来会导致其他类型的低效率(例如,如果您需要调整它们的大小)。
【讨论】:
因为原语在内存和 CPU 处理方面更轻、更高效。
【讨论】:
一个词:性能。
包装器类型也是不可变的,例如,如果想将一种包装器类型用于循环计数器,则成本会更高。
JVM 也有用于直接对原语进行算术运算的操作码。
【讨论】: