一个循环内初始化
回到基本问题一个循环内初始化
哪个“而”之一下面环路是高效的内存明智
SomeObject someObject;
while (iterator.hasNext()) {
someObject = iterator.next();
}
OR
while (iterator.hasNext()) {
SomeObject someObject = iterator.next();
}
两者实际上是相同的。这里创建的唯一东西就是参考。创建一次或多次它不会对内存或执行速度产生任何实际影响。
从设计和(GC)的角度来看:假设您正在迭代的Collection在while循环后得到GCed。
SomeObject someObject; //你仍然会有while循环
while (iterator.hasNext()) {
someObject = iterator.next();
}
//对象被someObject
引用将不准备GC这里外到最后SomeObject的参考。因为它仍然有一个参考。
OR
while (iterator.hasNext()) {
SomeObject someObject = iterator.next();
}
// someObject will make no impact on the GC of the object is points to.
查看代码可能无关紧要,集合的范围只能等于或大于SomeObject的范围,所以集合被GCed SomeObject不能发生之前。 –
@VivekVK - 如果我传递/返回变量'someObject'到另一个方法,并且如果集合是用这个方法创建的...?。这将直接影响集合中最后一个对象的GCing? – TheLostMind
你没有想到这一点。抱歉。 –
两个代码段正在除了东西,在第一种情况下,你可以使用对象引用someobject
即使在while
块已经完成了它的迭代没有什么区别。
是的,你可以。但那只会指向迭代器中的最后一个对象,所以我不认为它完全是“使用”,除非你特别需要最后一个通常不常见的对象。 –
@VivekVK与你完全同意,除了最后一个字'不常见' – nobalG
可能是我的看法。 –
编译器*最有可能*为您优化循环。 – TheLostMind
TheLostMind是对的,它们可能具有相同的效果 – Shail016
不要浪费时间去思考这些事情,除非你正在观察某种问题。 Java非常适合快速分配和取消分配对象和引用。 – Keppil