在Java循环期间列表对象引用已更改

Pab*_*ria 7 java iterator loops

我找不到任何关于此的话题.我想知道在循环期间更改列表类的引用是否安全,如下所示:

Tree minimalTree = someTree;
for (Tree st : minimalTree.getSubtrees()) {
  if (condition)
    minimalTree = st;
}
Run Code Online (Sandbox Code Playgroud)

迭代器是否会重置并重新启动以获取新引用?

编辑:我忘了说:这段代码适用于我想缩小搜索树中元素的情况,比方说,包含某些元素的小树.在这种情况下,继续只查看"minimalTree"的内部结构而不是整个"someTree"结构会更快.

biz*_*lop 6

不,迭代不会被重置.根据JLS:

增强的for语句相当于表单的基本for语句:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
     {VariableModifier} TargetType Identifier = (TargetType) #i.next();
     Statement
}
Run Code Online (Sandbox Code Playgroud)

该定义很明显迭代器仅在循环的第一次迭代之前初始化一次.

在这方面,使用增强的for语句迭代数组时的行为类似.

但是我个人认为它很糟糕,因为它使代码难以理解.