我一直在int
中使用for-loop
。如下所示:
for (int i = 0; i < 100 ; i++) {
//Do something...
}
如果我使用 Integer
而不是 int
,如下所示,是否有任何区别?
for (Integer i = 0; i < 100 ; i++) {
//Do something...
}
答案 0 :(得分:5)
是的,每次迭代都需要自动拆箱和自动装箱。它会以同样的方式工作,你不需要做任何东西来使它工作,但它是不必要的,很容易避免。
它也可能稍微减慢循环没有真正的优势。
基本上Integer
只应在您实际需要数字为Object
时使用(例如,当您将其放入集合时,{{1}是一个有效的值,...)。在所有其他时间,您应尽可能使用基元类型(null
,int
,...)。
答案 1 :(得分:3)
我假设您已经知道int
和Integer
之间的区别
循环的行为相同,但是当您不需要int
时,最好使用Integer
。不要这样做,它浪费时间(资本化“我”并添加“eger”:))。此外,由于auto-unboxing/auto-boxing将在每次迭代时完成,因此效率不高。
如果没有int
,则可以使用Integer
。
答案 2 :(得分:3)
我总是选择原始而不是Wrappers,我什么时候可以。
您的代码运行正常。
但是,尽管差别很小,
在运行时,如果我们在运行时使用Wrappers Boxing conversions和Unboxing 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[]
,那么你就会浪费很多记忆和速度。