为什么在 for 循环的迭代部分更改 pre 到 post 增量不会有所作为?

2022-08-31 22:16:47

为什么这样做

 int x = 2;
    for (int y =2; y>0;y--){
        System.out.println(x + " "+ y + " ");
        x++;
    }

打印与此相同?

 int x = 2;
        for (int y =2; y>0;--y){
            System.out.println(x + " "+ y + " ");
            x++;
        }

据我所知,后增量首先“按原样”使用,然后递增。是否预先增量首先添加,然后使用。为什么这不适用于 for 循环的主体?


答案 1

该循环等效于:

int x = 2;
{
   int y = 2;
   while (y > 0)
   {
      System.out.println(x + " "+ y + " ");
      x++;
      y--; // or --y;
   }
}

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

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

for (ForInit ; Expression ; ForUpdate)
    forLoopBody();

与 while 循环完全相同:

{
    ForInit;
    while (Expression) {
        forLoopBody();
        ForUpdate;
    }
}

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


答案 2

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

for (int i = 0; i < 5; ++i) {
    do_stuff(i);
}

扩展为:

int i = 0;
while (i < 5) {
    do_stuff(i);
    ++i;
}

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


推荐