Java for循环中的增量给出不同的答案

Java for循环中的增量给出不同的答案,java,Java,这里的输出是1,2和1,3。在这两种情况下,我们都在进行增量后处理和增量前处理,为什么会得到不同的结果?因为增量后处理发生在迭代结束时 因此,代码如下: class Test { public static void main(String[] args) { for (int i= 1; i < 2; i++) { System.out.println(i); System.out.println(++i);

这里的输出是1,2和1,3。在这两种情况下,我们都在进行增量后处理和增量前处理,为什么会得到不同的结果?

因为增量后处理发生在迭代结束时

因此,代码如下:

class Test {
    public static void main(String[] args) {
        for (int i= 1; i < 2; i++) {
            System.out.println(i);
            System.out.println(++i);

            int a = 1;
            System.out.println(a++);
            System.out.println(++a);
        }
    }
}
循环中的i++定义只在每次迭代结束时发生。因为循环在第一次迭代后终止,所以在执行i++之后,永远不会打印i的值


顺便说一句,如果i++是在System.out.printlni;,之前执行的;,与最后两个println语句相比,您仍然会得到不同的输出-2后跟3。

在第一种情况下,不会调用post increment。如果您了解for循环是如何工作的,您就会知道增量部分不是第一次执行的。初始化部分,这里int i=1,条件检查-i<2被验证。增量部分仅在每次迭代后调用

在第二种情况下,会执行后增量,因此会产生值的差异。您应该更多地关注循环的基础知识。

System.out.printlni

我在这里不是后加的。如果答案是:

    System.out.println(i); // 1 (initial value)
    System.out.println(++i); // 2 (pre increment returns the value after increment)

    int a = 1;
    System.out.println(a++); // 1 (initial value prior to increment, since post increment 
                             // returns the value prior to increment)
    System.out.println(++a); // 3 (pre increment returns the value after increment)
在完成传递循环之前不执行任何操作。

更准确地说:这种类型的基本for语句是:

等效的while循环是:

for ([ForInit]; [Expression]; [ForUpdate]) Statement
换句话说,更新是在循环体之后执行的

因此,您的代码相当于:

[ForInit];
while ([Expression]) {
  Statement;
  [ForUpdate];
}

希望这样可以很容易地看出输出中存在差异的原因。

您需要了解Java中的后增量运算符和前增量运算符使用调试器,并了解值如何随迭代而变化……对于int i=1;i<2;i++重复建议必须在循环的上下文中,而不仅仅是在增量之前/之后。这里的循环是完全不相关的。为什么否决投票?对于for循环中的第一次迭代,增量之后不起作用是不正确的。你是想说for循环的最后一个术语,即i++在循环的末尾被计算吗?后期增量的工作方式不会因您所处的迭代而改变。@matt是的,这是我通过解释后期增量在迭代中发生的位置而分享的内容end@matt也更新了声明以避免混淆,现在有意义了,干杯。
    System.out.println(i); // 1 (initial value)
    System.out.println(++i); // 2 (pre increment returns the value after increment)

    int a = 1;
    System.out.println(a++); // 1 (initial value prior to increment, since post increment 
                             // returns the value prior to increment)
    System.out.println(++a); // 3 (pre increment returns the value after increment)
System.out.println(i++);
System.out.println(++i);

int a = 1;
System.out.println(a++);
System.out.println(++a);



for (int i= 1; i < 2; **i++)**
for ([ForInit]; [Expression]; [ForUpdate]) Statement
[ForInit];
while ([Expression]) {
  Statement;
  [ForUpdate];
}
// ForInit
int i = 1;
while (/* Expression */ i < 2) {
  // Statement
  System.out.println(i);
  System.out.println(++i);

  int a = 1;
  System.out.println(a++);
  System.out.println(++a);

  // ForUpdate
  i++;
}