我在java中有以下代码
int x=5;
System.out.println(x++ + ++x);
输出为12。
我认为它应该是11。
我们这里有三个运营商:
+
另外++
(帖子)++
(上)上面的print语句以哪种顺序编译?
如果我写int x=5;
然后++x
,请写x==6
或x==5
,因为我还没有写x=++x
。新值是否存储在x?
寻找一种方法来记住Java或.NET中的运算符优先级,就像我们有DMAS一样。这也是他们的任何比喻吗?
答案 0 :(得分:5)
x++
等于5
但x
已成为6
。 ++x
表示6
增加1
,++x
为7
。所以5 + 7 = 12
是正确答案。
答案 1 :(得分:2)
在C和C ++中,这种事情是未定义的行为(因为,在这些语言中,+
不会序列这两个表达式。)< / p>
但是在Java中,是定义的。评估顺序是从左到右。
这很简单:第一个表达式为x++
,其值为5,但x
增加到6。
第二个表达式是++x
,它将x
从6增加到7,其值为7.
5 + 7 = 12
:完成。
不用说,不建议使用这种代码。而C / C ++的端口将是灾难性的。
答案 2 :(得分:1)
在第
行System.out.println(x++ + ++x);
首先x
为5,因此在x++
之后,x
将为6,但表达式将在之前进行评估,因此您将拥有:
5 + ++x
此时x
为6,因此++x
将首先将x
增加到7,然后评估表达式。最后你会得到:
5 + 7
是12
。
答案 3 :(得分:1)
评估/增量将在+运算符之前,一个接一个地发生
您的println是,一步一步:
(x++ + ++x)
其中x = 5
(5++ + ++x)
其中x = 5
(5 + ++x)
其中x = 6
(5 + x)
其中x = 7
(5 + 7)
= 12
在对x求和之前,你有2个x的增量,从5到7,因此解释了总数为12。
答案 4 :(得分:1)
答案 5 :(得分:0)
重点是:
x ++增量x表达式中的赋值后。 ++ x增量x在表达式中的赋值之前。
所以,在你的例子中,你实际上做了5 + 7。 5因为增量是在评估之后完成的,所以x变为6。 7因为增量是在评估之前完成的,所以x变为7。