什么时候循环比while循环更好?

Ale*_*gan 5 java loops while-loop do-while

这是一个非常主观的问题,所以我会更具体.有没有时间do-while循环比正常的while循环更好的编码风格?

例如

int count = 0;
do {
   System.out.println("Welcome to Java");
   count++;
} while (count < 10);`
Run Code Online (Sandbox Code Playgroud)

在评估do语句(也就是强制do语句至少运行一次)之后检查while条件似乎没有意义.

对于像我上面的例子那样简单的东西,我会想象:

int count = 0; 
while(count < 10) { 
   System.out.println("Welcome to Java"); count++;
}
Run Code Online (Sandbox Code Playgroud)

通常被认为是以更好的写作风格写成的.

任何人都可以为我提供一个工作示例,说明什么时候将do-while循环视为唯一/最佳选择?你的代码中有do-while循环吗?它起什么作用?你为什么选择do-while循环?

(我有一种深刻的感觉,do-while循环可能在编码游戏中有用.如果我错了,请纠正我,游戏开发者!)

Eni*_*gma 6

如果要从网络套接字读取数据直到找到字符序列,则首先需要读取数据,然后检查数据是否有转义序列。

do
{ 
   // read data
} while ( /* data is not escape sequence */ );
Run Code Online (Sandbox Code Playgroud)


Sat*_*eri 6

当特定条件为真时,该while语句不断执行语句块

while (expression) {
     statement(s)
}
Run Code Online (Sandbox Code Playgroud)

do-while在循环底部计算其表达式,因此 do 块中的语句始终至少执行一次。

do {
     statement(s)
} while (expression);
Run Code Online (Sandbox Code Playgroud)

现在谈谈功能上的区别,

while-loops由条件分支指令(例如 if_icmpge 或 if_icmplt)和 goto 语句组成。条件指令将执行分支到紧接着循环之后的指令,因此如果不满足条件则终止循环。循环中的最后一条指令是 goto,它将字节码分支回循环的开头,确保字节码保持循环直到满足条件分支。

ADo-while-loops也与 for 循环和 while 循环非常相似,不同之处在于它们不需要 goto 指令,因为条件分支是最后一条指令,用于循环回到开头 do-while 循环始终运行循环体至少一次 - 它会跳过初始条件检查。由于它跳过第一次检查,因此一个分支将越来越少,并且要评估的条件也会越来越少。

do-while如果表达式/条件很复杂,通过使用您可以获得性能,因为它确保至少循环一次。在这种情况下do-while could call for performance gain

这里的发现非常令人印象深刻, http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html#while_loop