如果我有这样的for循环:
for(int i = 0; i < getInt(); i++){//code}
Run Code Online (Sandbox Code Playgroud)
每次for循环检查时是否会执行getInt():
i < getInt();
Run Code Online (Sandbox Code Playgroud)
或者它会在最开始执行一次并返回一个值j,以便for循环可以检查是否:
i < j;
Run Code Online (Sandbox Code Playgroud)
我想知道的特定语言是Java,但如果答案在其他语言中有所不同,我也想知道.
是的,它将在每个循环中执行.
基本上,执行是这样的:
for条件的第一部分执行一次true是循环体执行的话.否则,请转到循环后的语句.i++此处)2.对于第二部分(延续条件)而言,每次都不能进行全面评估是没有意义的.如果循环体中的某些东西导致getInt()迭代之间返回不同的值会怎么样?
当然,编译器可以自由地围绕常量表达式和其他一些可以证明的事情进行优化.例如,如果getInt()定义如下:
public int getInt() {
return 4;
}
Run Code Online (Sandbox Code Playgroud)
你的编译器可以
for(int i = 0; i < 4; i++) { //body }在某些情况下getInt()实际上会被调用,在其他情况下则不会.在所有情况下,您的编译器都是正确的,因为它只会执行转换,导致代码行为与未执行转换时完全相同.
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |