2

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

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

如果我使用Integer而不是int,如下所示,它有什么不同吗?

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

8 回答 8

5

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

此外,它可能会稍微减慢循环速度,而没有真正的优势。

基本上Integer应该只在您实际需要数字时才使用Object(例如,当您将其放入集合时,何时null是有效值,......)。在所有其他时间,您应该尽可能使用原始类型(int, char, ...)。

于 2013-10-09T10:34:09.167 回答
3

我总是选择原始而不是包装器,只要我可以。

您的代码工作正常。

但是,虽然差别很小,

在运行时,如果我们使用 Wrappers装箱转换拆箱转换发生在运行时,显然这需要更多时间。

如果 p 是 int 类型的值,则装箱转换将 p 转换为类和 Integer 类型的引用 r,使得 r.intValue() == p

反之亦然,如果我们使用Primitives.

于 2013-10-09T10:34:53.150 回答
3

int我假设您已经知道和之间的区别Integer
循环的行为相同,int但当您不需要Integer. 不要那样做,这会浪费时间(大写“i”并添加“eger”:))。此外,它效率不高,因为每次迭代都会进行自动拆箱/自动装箱。

int没有Integer.

于 2013-10-09T10:33:51.347 回答
2

Integer由于装箱,使用会产生性能成本,所以使用int.

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

于 2013-10-09T10:35:55.440 回答
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)。

于 2013-10-09T10:34:07.183 回答
1

由于Java 5 的自动装箱和拆箱功能,它没有。

于 2013-10-09T10:33:27.910 回答
1

不,它对功能没有任何影响。自动装箱和自动拆箱功能可帮助您i++循环使用

于 2013-10-09T10:33:47.723 回答
-1

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

在这种情况下,它可能不会有太大的不同,但假设你使用 say Integer[]而不是int[],那么你会浪费很多内存和速度。

于 2013-10-09T10:35:33.567 回答