抱歉,我想不出一个更好的头衔。
无论如何,当我编译以下代码时:
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。
答案 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