在循环内初始化

时间:2014-07-16 06:35:15

标签: java

回到基础问题

下面哪个'WHILE'循环是有效的记忆

     SomeObject someObject;
     while (iterator.hasNext()) {
         someObject = iterator.next();
     }

OR

while (iterator.hasNext()) {
  SomeObject   someObject = iterator.next();
 }

4 个答案:

答案 0 :(得分:2)

两者几乎相同。这里创建的唯一内容是引用。创建它一次或多次它将永远不会对内存或执行速度产生实际影响。

答案 1 :(得分:1)

从设计和(GC)的角度来看:假设您正在迭代的Collection在while循环之后获得GCed。

SomeObject someObject; //你仍然会引用while循环之外的最后一个SomeObject

 while (iterator.hasNext()) {
     someObject = iterator.next();
 }

// someObject引用的对象在这里不适合GC。因为它仍然会引用它。

OR

while (iterator.hasNext()) {
  SomeObject   someObject = iterator.next();
 }
// someObject will make no impact on the GC of the object is points to.

答案 2 :(得分:0)

除了在第一种情况下即使在someobject块完成迭代之后你也可以使用对象引用while之外,代码片段没有任何区别。

答案 3 :(得分:-3)

第一个在Java中效率更高,因为每次循环运行时都不会创建新对象。这意味着垃圾收集必须更频繁地运行以删除旧对象。作为一般规则(即使在非垃圾收集语言中),重用旧对象比删除旧对象和创建新对象更有效