`Continue` 是否跳转到 `do while` 的顶部?

问题描述 投票:0回答:7

我有一个

do while
,看起来像:

User user = userDao.Get(1);

do
{
  // processing...

  // get the next user
  user = UserDao.GetNext(user.Id);

  if( user == null )
    continue; // will this jump to the top of the loop?
}
while( user != null )

它会到达 do 语句的顶部吗?

user == null
所以事情会中断?

也许我应该将循环修改为 while 语句?

java loops do-while
7个回答
54
投票

继续使其跳转到底部的评估,以便程序可以评估是否必须继续另一次迭代或退出。在这种情况下它将退出。

这是规范:http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045

此类语言问题你可以在Java语言规范中搜索一下:http://java.sun.com/docs/books/jls/


5
投票

是的,

continue
将在 do..while 循环中工作。

您可能想使用

break
而不是
continue
来停止处理用户,或者完全删除
if null continue
位,因为无论如何,只要 user 为 null,while 循环就会中断。


5
投票

这确实不是编写这段代码的最佳方式。如果 user 为 null,那么当您下次尝试获取 user.id 时,您将收到 NullPointerException。更好的方法是:

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}

3
投票

为什么要在两个地方测试用户? while 条件将在 user 为 null 时终止循环,这正是您想要的。


1
投票

简短的回答是,继续(和中断)在 do while 循环中正常工作。

正如其他人指出的那样,从示例来看,您可能期望 continue 出现错误的行为。


0
投票

让我们看看:

$cat DoWhileContinue.java 
class DoWhileContinue {

    public static void main( String [] args ) {
        int i = 0;
        int y = 0;
        do {
            i++;
            if( i > 100 ) {
                continue;
            }
            y++;

        } while( i < 500  );
        System.out.printf("i=%d, y=%d %n", i, y );
    }
}
$javac DoWhileContinue.java 
$java DoWhileContinue
i=500, y=100 

是的,确实如此。在此示例中,您可以看到

y
值是
100
,因为执行了
continue
语句并阻止了变量随后增加。


0
投票

continue 将跳转到 while 内的循环评估语句,这看起来多余,因为 if 和 while 正在评估同一件事。我认为最好使用休息或简单地让 while 条件完成工作(您的 while 条件已经为您检查)

© www.soinside.com 2019 - 2024. All rights reserved.