首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在for循环的迭代部分将pre更改为post增量不会有什么不同呢?

为什么在for循环的迭代部分将pre更改为post增量不会有什么不同呢?
EN

Stack Overflow用户
提问于 2009-12-17 06:17:03
回答 27查看 20.1K关注 0票数 47

为什么会这样?

代码语言:javascript
复制
 int x = 2;
    for (int y =2; y>0;y--){
        System.out.println(x + " "+ y + " ");
        x++;
    }

打印的内容和这个一样吗?

代码语言:javascript
复制
 int x = 2;
        for (int y =2; y>0;--y){
            System.out.println(x + " "+ y + " ");
            x++;
        }

据我所知,post-increment是先“原样”使用,然后再递增。是前置增量,先加后用。为什么这不适用于for循环的主体?

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2009-12-17 06:20:03

该循环等同于:

代码语言:javascript
复制
int x = 2;
{
   int y = 2;
   while (y > 0)
   {
      System.out.println(x + " "+ y + " ");
      x++;
      y--; // or --y;
   }
}

从阅读该代码可以看出,在for循环的第三部分中使用post或pre减量运算符并不重要。

更一般的是,任何形式的for循环:

代码语言:javascript
复制
for (ForInit ; Expression ; ForUpdate)
    forLoopBody();

完全等同于while循环:

代码语言:javascript
复制
{
    ForInit;
    while (Expression) {
        forLoopBody();
        ForUpdate;
    }
}

for循环更紧凑,因此更容易解析这种常见的习惯用法。

票数 69
EN

Stack Overflow用户

发布于 2010-08-18 18:19:58

要可视化这些内容,请将for循环展开为while循环:

代码语言:javascript
复制
for (int i = 0; i < 5; ++i) {
    do_stuff(i);
}

扩展为:

代码语言:javascript
复制
int i = 0;
while (i < 5) {
    do_stuff(i);
    ++i;
}

在循环计数器上执行后增量还是前增量并不重要,因为增量表达式的结果(增量之前或之后的值)不会在同一条语句中使用。

票数 32
EN

Stack Overflow用户

发布于 2010-04-13 00:45:53

如果这是您所关心的,那么在性能方面没有区别。只有在增量期间使用它时,它才能被错误地使用(因此对错误很敏感)。

考虑一下:

代码语言:javascript
复制
for (int i = 0; i < 3;)
   System.out.print(++i + ".."); //prints 1..2..3


for (int i = 0; i < 3;)
   System.out.print(i++ + ".."); //prints 0..1..2

代码语言:javascript
复制
for (int i = 0; i++ < 3;)
   System.out.print(i + ".."); //prints 1..2..3


for (int i = 0; ++i < 3;)
   System.out.print(i + ".."); //prints 1..2

然而,有趣的细节是,通常的习惯用法是在for语句的增量表达式中使用i++,并且Java编译器将像使用++i一样对其进行编译。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1918196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档