在 Java 的 `while` 循环中使用 `break` 语句有什么问题?

What are the problems of using `break` statement in a `while` loop in Java?

我参加了 Java 的 session,演讲者说在 while 循环中使用 break 语句是一种不好的做法。他说可以用,但是从"good coding practice"的角度来说不应该用。他无法令人满意地解释为什么会这样。

但是,他还提到在 for 循环的情况下此限制无效。任何人都可以对此有所了解吗?

编辑:我不是在谈论 while(true)。一般在任何时候(条件)。

许多人将 break and continue 视为 goto 或指令,因为它们会中断执行流程并跳转到不同的点。一个好的做法是为每个执行块设置一个入口和出口点。

IMO,在 while 循环中使用 break 还不错。不过我能猜到演讲者为什么这么说。

所以如果我有这样一个 while 循环:

while (condition1) {
    if (condition2) {
        break;
    }
    // do other stuff
}

你绝对可以通过这样做来缩短代码:

while(condition1 && !condition2) {
    // do other stuff
}

演讲者可能认为 while 循环中的 break 是不必要的,因为您可以将所有条件写在应该写的地方,即括号中。

然而,事实并非如此。如果我有这个 while 循环:

while (condition1) {
    // do other stuff
    if (condition2) {
        break;
    }
}

如何更改它以使其不使用 break

while (condition1) {
    // do other stuff
    if (condition2) {
        condition1 = false;
    }
}

我觉得这不太好。

让我们将其放入一段有意义的代码中。您认为哪个更具可读性:

while(noWallInFront) {
    walk();
    if (sawFriend) {
        sayHi();
        break;
    }
}

while(noWallInFront) {
    walk();
    if (sawFriend) {
        sayHi();
        noWallInFront = false;
    }
}

显然是第一个,对吧?第二个听起来像是把你的朋友当成一堵墙。