在循环中使用Integer会有什么不同吗?

时间:2013-10-09 10:31:31

标签: java for-loop wrapper primitive

我一直在int中使用for-loop。如下所示:

for (int i = 0; i < 100 ; i++) {
     //Do something...
}

如果我使用 Integer 而不是 int ,如下所示,是否有任何区别?

for (Integer i = 0; i < 100 ; i++) {
     //Do something...
}

8 个答案:

答案 0 :(得分:5)

是的,每次迭代都需要自动拆箱和自动装箱。它会以同样的方式工作,你不需要任何东西来使它工作,但它是不必要的,很容易避免。

它也可能稍微减慢循环没有真正的优势。

基本上Integer只应在您实际需要数字为Object时使用(例如,当您将其放入集合时,{{1}是一个有效的值,...)。在所有其他时间,您应尽可能使用基元类型(nullint,...)。

答案 1 :(得分:3)

我假设您已经知道intInteger之间的区别 循环的行为相同,但是当您不需要int时,最好使用Integer。不要这样做,它浪费时间(资本化“我”并添加“eger”:))。此外,由于auto-unboxing/auto-boxing将在每次迭代时完成,因此效率不高。

如果没有int,则可以使用Integer

答案 2 :(得分:3)

我总是选择原始而不是Wrappers,我什么时候可以。

您的代码运行正常。

但是,尽管差别很小,

在运行时,如果我们在运行时使用Wrappers Boxing conversionsUnboxing Conversions,显然需要更多时间。

  

如果p是int类型的值,那么装箱转换将p转换为类的引用r并输入Integer,这样r.intValue()== p

反之亦然,如果我们使用Primitives,则会保存此时间。

答案 3 :(得分:2)

唯一的大事(虽然我不会自己做,也不会建议你这样做)我可以考虑在这种情况下使用

for (Integer i = 0; i < 100 ; i++) {
     i = null; // Can do this here but not in the other loop
     // Obviously this is not going to be the only line here, unless you wanna get a NPE
     // Just something, which you COULD DO
}

除此之外,我真的怀疑它是否会起作用。虽然使用int是首选。此外,每次迭代的装箱和自动装箱都不是一件好事(当你可以直接使用int时)。

答案 4 :(得分:2)

使用Integer会因拳击而产生性能成本,因此请使用int

但是,如果您打算在循环体中使用i,例如哈希映射键,则使用引用类型Integer

答案 5 :(得分:1)

感谢{5}的Java 5功能,它没有。

答案 6 :(得分:1)

不,它的功能没有任何区别。自动装箱和自动取消装箱功能可帮助您在循环中使用i++

答案 7 :(得分:-1)

不,不会。 Integer是一个包装器,它为原始int类型添加了一些功能。如果您不打算使用该功能,最好坚持int

在这种情况下,它可能没有太大的区别但是假设你要使用say Integer[]而不是int[],那么你就会浪费很多记忆和速度。