我的意思是:
for (int i = 0; i < 10; i++)
System.out.println(i);
和
for (int i = 0; i < 10; ++i)
System.out.println(i);
将产生相同的结果。 ++i
是否在第一个循环完成之前根本没有被评估?
最佳答案
因为您的 for
循环等同于此:
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
在下一次迭代检查条件之前,后递增或预递增操作在最后评估(并丢弃其返回值)。
如果使用返回值,它们将完全不同。下面的代码等价于上面的循环:
int i = 0;
while (i < 10) {
System.out.println(i);
i = ++i; // pre
}
...但是这段代码创建了一个无限循环(i
永远不会递增):
int i = 0;
while (i < 10) {
System.out.println(i);
i = i++; // post
}
警告:最后两个示例是 Java 特定的。 C 和 C++ 中的行为是未定义的,两者在您的编译器上可能完全相同。
关于java - 为什么 `for(;;i++)` 和 Java 中的 `for(;;++i)` 一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072257/