我找不到关于此的任何话题。我想知道在像下面这样的循环中更改列表类的引用是否安全:

Tree minimalTree = someTree;
for (Tree st : minimalTree.getSubtrees()) {
  if (condition)
    minimalTree = st;
}

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

编辑:我忘了说:此代码适用于以下情况:我想缩小对树中元素的搜索范围,例如,包含某些元素的较小树。在这种情况下,仅查找“minimalTree”的内部结构而不是整个“someTree”结构会更快。

最佳答案

不,迭代不会重置。根据JLS:



该定义显而易见,迭代器仅在循环的第一次迭代之前初始化一次。

在这方面,使用增强的for语句遍历数组时的行为与此类似。

但是我个人认为这是不好的做法,因为它会使代码难以理解。

10-08 19:32