为什么`for(;; i ++)`就像`for(;; ++ i)`在Java中一样?

Yur*_*sev 1 java

我的意思是:

for (int i = 0; i < 10; i++)
    System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

for (int i = 0; i < 10; ++i)
    System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

将产生相同的结果.是++i没有评估,一直到第一循环完成?

Way*_*ett 5

因为你的for循环等价于:

int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

在下一次迭代检查条件之前,在结束时评估后增量操作或预增量操作(并丢弃其返回值).

如果使用返回值,它们将完全不同.以下代码等同于上面的循环:

int i = 0;
while (i < 10) {
    System.out.println(i);
    i = ++i; // pre
}
Run Code Online (Sandbox Code Playgroud)

...但是这段代码创建了一个无限循环(i永远不会增加):

int i = 0;
while (i < 10) {
    System.out.println(i);
    i = i++; // post
}
Run Code Online (Sandbox Code Playgroud)

警告:最后两个示例是特定于Java的.C和C++中的行为是未定义的,两者在编译器上可能完全相同.