0

抱歉,我想不出更好的标题。

无论如何,当我编译以下代码时:

class Example{

    public static void main(String[] args) throws Exception {
        int x = 3;
        x -= 2 + x++ == 4 ? x++ : ++x;
        System.out.println("x = " + x);
    }
}

我得到答案-2。现在我真的很想知道这个答案是怎么来的,因为我找不到。如果我能得到答案,那就太棒了,因为这可能是我很快就会参加的考试。注意:我当然不会自己编写这样的代码,这只是一个练习。

如果你能帮助我,非常感谢!

编辑:回答 fge 的回答:

好的谢谢!但现在如果我稍微改变一下,让它像这样:

    x = 2;
x += 3 + ++x == 6 ? x-- : x--;
System.out.println("x = " + x);

我认为你会得到以下信息:

++x == 6

不是真的,因为 x 现在是 3。这意味着我们得到 x--,现在又变成 2。

然后我们得到 3 + 2 = 5,所以表达式可以计算为:

x += 5

因为 x 现在是 2,所以我们得到 2 + 5 = 7。

4

1 回答 1

3

当您创建这样的代码示例时

int x = 3;
System.out.println(2 + x++ == 4 ? x++ : ++x);

你会看到输出是5. 这是因为它相当于

(2 + x++) == 4 ? x++ : ++x

所以首先 Java 将评估 (2+ x++)。由于我们的x++x将首先创建 (2+3) 然后递增,所以x现在将是 4 之后。

因为(2+3) == 4是假的,因为(5 == 4)我们将执行这部分++x,首先递增x到 5,然后返回它。


现在让我们回到你的例子

int x = 3;
x -= 2 + x++ == 4 ? x++ : ++x;

你可能知道x -= y事实上是x = x - y这样,所以它可以写成

x = x - (2 + x++ == 4 ? x++ : ++x);

因此,由于 Java 从左到右计算,它将是

x = 3 - (2 + x++ == 4 ? x++ : ++x);

我们现在知道(2 + x++ == 4 ? x++ : ++x)事实上是5这样的

x = 3 - 5; // == -2
于 2013-06-16T22:20:00.407 回答