比较 int 和 Integer 的性能表现

22

在编程中,使用哪种类型更好-int还是Integer?尤其是当两者都执行相同任务时?

我正在使用Java编写一个应用程序,在大多数原始数据类型的地方,我使用int;对于对象,我使用Integer。因此,我很困惑-在必须使用对象的情况下,哪种类型最好。

根据性能来讲,在Java应用程序中哪种类型最好?

5个回答

34

尽可能使用int,需要时再使用Integer。因为int是原始类型,所以速度更快。现代JVM可以使用自动装箱来优化Integer,但如果要编写性能关键的代码,int是最好的选择。

可以查看这个这个文章。虽然不应将它们视为绝对真理,但它们表明对象将比其原始类型的对应物慢。

因此,尽可能使用int(我会重复一遍:如果您正在编写性能关键的代码),如果方法要求一个Integer,则请使用它。

如果您不关心性能,并且想以面向对象的方式完成所有操作,请使用Integer


6
性能并不是唯一需要考虑的因素。int比Integer占用更少的内存(粗略地说,一个Integer占用的内存是int的两倍)。如果你处理许多数字,这可能会造成实质性差异。 - user330315
1
答案中的链接已经失效了,这里是第二篇文章的最新链接。从文章中可以得出一个结论,即在考虑性能时,对于许多用例,使用 int 和 Integer 之间的差异并不会很大。除非你处理的是非常大量的整数或计算。 - neilireson

7

尽可能使用int。只有在以下情况下才使用Integer

  • 您需要一种表示“无值”或“未初始化”的方法。 Integer可以是null,而int始终具有int值。
  • 您想要使用像List这样的集合(虽然您可以在外部使用int并让自动装箱隐藏集合内部存储Integer实例的事实)。
  • 您正在使用需要您使用IntegerObject,或不适用于基本类型的API、框架或工具。
  • 您需要能够对对象进行同步(非常不可能)。

1
这些建议今天仍然适用吗?我正在进行一些与JSON反序列化相关的重型工作,我很难想出一种表示未初始化(可选)字段的策略。如果更合适,我将提出一个单独的问题。 - NathanChristie
现在,人们更倾向于使用OptionalInt及其.empty()表示“无值”。 - glglgl

3

int是一个原始类型,通常情况下它应该更快。它只携带原始数字数据。

Integer是一个对象,它携带一些额外的东西,例如可以将数字放入列表中。


3
作为一种替代观点......也许你既不应该使用 Integer,也不应该使用 int。
如果这个值确实是一个带有行为的对象 - 比如说一笔钱或者一段距离之类的东西,那么也许你应该使用一个带有行为的对象。
你可以在这里了解更多相关信息:

http://www.time4tea.net/wiki/display/MAIN/Microtypes

虽然这可能会“慢一些”,但额外的类型安全将使您的系统编程、测试和调试更加容易和快速。


1

int是原始类型,而Integer是将int封装为对象。

它们的使用方式取决于具体情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接