java - 为什么 `for(;;i++)` 和 Java 中的 `for(;;++i)` 一样工作?

标签 java

我的意思是:

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/

相关文章:

Java 使用 Apache Spark 指定架构从 json 文件读取

java - 如何读取查询参数键和值

java - 使用 Java 代码中的 sql 将当前日期和时间更新到数据库

java - 调用 JvmModelInferrer/Generator 从 Java 项目生成代码时出现 NullPointerException

java - 使用mockito在JUnit中模拟ReentrantReadWriteLock

java - Spring 中 @Transactional 相对于 ProxyFactoryBean 的性能

java - 将最后一个元素添加到数组后面的字符串中

java - 如何一起使用javamail和appengine API?

java - "Column Count doesn' t 第 1 行的匹配值计数"E

java - 将 gradle 版本更新到 3.0.1 后,Toast 停止工作/显示