快速的小拼图-Y Java事物

时间:2013-06-16 21:41:54

标签: java

抱歉,我想不出一个更好的头衔。

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

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。

1 个答案:

答案 0 :(得分: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为false,因为(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