如何在 if 条件下递增和递减

How increment and decrement with if condition

我有这个代码:

class Example {
    public static void main(String args[]) {
        int x = 99;

        if (x++ == x) {
            System.out.println("x++==x : " + x);
        }

        if (++x == x ) {
            System.out.println("++x==x : " + x); // ++x == x : 101
        }

        if (x == x++) {
            System.out.println("x==x++ : " + x); //x==x++ : 102
        }

        if (x == ++x) {
            System.out.println("x==++x : " + x);
        }

        if (++x == ++x) {
            System.out.println("++x==++x : " + x);
        }

        if (x++ == x++) {
            System.out.println("x++==x++ : " + x);
        }

        if (++x == x++) {
            System.out.println("++x==x++ : " + x); // ++x==x++ : 109
        }           
    }
}

这是输出 -->

++x==x : 101
x==x++ : 102
++x==x++ : 109

我想弄清楚 java 编译器是如何处理这段代码的。我可以弄清楚它是如何得出这部分输出的:

++x==x : 101
x==x++ : 102

但我无法处理这部分输出:

++x==x++ : 109

这段代码是如何工作的?最重要的是最后的输出是如何工作的?

你只需要知道 3 件事,并用逻辑将它们组合起来:

  1. x++ 表示:“递增 x,但表达式的值是递增之前 x 的值”。
  2. ++x 表示:“递增 x,表达式的值就是递增后 的值”。
  3. 对于 == 运算符,事情从左到右解析。所以,java 'resolves'左边的东西,然后右边的东西,然后计算。

因此,给定:++x==x++,假设 x 开始时为 107。让我们分解一下:

  1. 首先解析左侧,即++x。为此,递增(x 现在是 108),然后将表达式解析为值 after 递增。所以,左边是 108.
  2. 接下来解析右侧,即x++。为此,递增(x 现在是 109),然后将表达式解析为值 before 递增。所以,右边是 108.
  3. 现在做手术。 108 == 108。那是 true,所以 if 'passes',然后打印结果。鉴于 x 现在是 109,它会打印 "++x==x++ : 109".

这正是它的作用。

++x是预增 x++ 是 post-增量

即使您的条件为假,递增也会完成。