我有一个
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 语句?
继续使其跳转到底部的评估,以便程序可以评估是否必须继续另一次迭代或退出。在这种情况下它将退出。
这是规范:http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045
此类语言问题你可以在Java语言规范中搜索一下:http://java.sun.com/docs/books/jls/
是的,
continue
将在 do..while 循环中工作。
您可能想使用
break
而不是 continue
来停止处理用户,或者完全删除 if null continue
位,因为无论如何,只要 user 为 null,while 循环就会中断。
这确实不是编写这段代码的最佳方式。如果 user 为 null,那么当您下次尝试获取 user.id 时,您将收到 NullPointerException。更好的方法是:
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
为什么要在两个地方测试用户? while 条件将在 user 为 null 时终止循环,这正是您想要的。
简短的回答是,继续(和中断)在 do while 循环中正常工作。
正如其他人指出的那样,从示例来看,您可能期望 continue 出现错误的行为。
让我们看看:
$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
语句并阻止了变量随后增加。
continue 将跳转到 while 内的循环评估语句,这看起来多余,因为 if 和 while 正在评估同一件事。我认为最好使用休息或简单地让 while 条件完成工作(您的 while 条件已经为您检查)