Java中带加法的post增量

Java中带加法的post增量,java,.net,operators,addition,post-increment,Java,.net,Operators,Addition,Post Increment,我有以下java代码 int x=5; System.out.println(x++ + ++x); 输出为12 我想应该是11点 我们这里有三家运营商: +添加 ++(post) ++(预) 列表项 上面的print语句按什么顺序编译 如果我写intx=5然后++x,做x==6或x==5,因为我没有写x=++x。新值是否存储在x中 正在寻找一种在Java或.NET中记住运算符优先级的方法,就像我们有DMA一样。他们也有类似的说法吗?x++等于5,但x变成了6++x表示6增加1,即++x为

我有以下java代码

int x=5;
System.out.println(x++ + ++x);
输出为12

我想应该是11点

我们这里有三家运营商:

  • +
    添加
  • ++
    (post)
  • ++
    (预)
  • 列表项
上面的print语句按什么顺序编译

如果我写
intx=5
然后
++x
,做
x==6
x==5
,因为我没有写
x=++x
。新值是否存储在x中


正在寻找一种在Java或.NET中记住运算符优先级的方法,就像我们有DMA一样。他们也有类似的说法吗?

x++
等于
5
,但
x
变成了
6
++x
表示
6
增加
1
,即
++x
7
。所以,<代码> 5 + 7=12 < /C>是正确答案。

< P>在C和C++中,这种事情是未定义的行为(因为在这些语言中,<代码> +/COD>不排序这两个表达式)。< /P> 但在Java中,它是被定义的。评估顺序是从左到右

很简单:第一个表达式是
x++
,它的值为5,但将
x
增加到6

第二个表达式是
++x
,它将
x
从6增加到7,值为7

5+7=12
:完成

不用说,不推荐使用这种代码。而C/C++的端口将是个极值。
System.out.println(x++ + ++x);
第一个
x
是5,因此在
x++
之后,
x
将是6,但表达式将在增量之前求值,因此您将有:

5 + ++x
5 + 7
此时
x
为6,因此
++x
将首先将
x
增加到7,然后计算表达式。最后,您将有:

5 + ++x
5 + 7
这是
12

关键是:

x++在表达式中赋值后递增x。 ++x在表达式中赋值之前递增x

所以,在你的例子中,实际上是5+7。 5因为增量是在求值之后进行的,所以x变成6。
7因为增量是在求值之前完成的,所以x变为7。

求值/增量将在+运算符之前依次出现

您的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的总数。

在表达式求值过程中,仅使用值。(在表达式求值完成后使用增量后运算符) 这可能对你有帮助

   =x++ + ++x
   =x++ + 6
   =6 + 6
   =12

你确实意识到,如果人们不再做愚蠢的事情,他们就不需要问这样的问题了,是吗?:-)说真的,到底是谁写的代码像
x+++++++x
?@paxdiablo如果在考试中我必须写出以下语句的输出,通过它只有1分,我应该说“这是谁写的这篇论文?”@user1765876非常严肃地说,我会(a)回答它,(b)问教授为什么他们会问这样的问题,考虑到这是你不应该在野外看到的东西。但是,从毕业后的舒适世界来看,教授们再也不能影响我了@我同意我们在现实世界中看不到这样的东西,但这样的问题是检查/确保学生概念的极好方法。+1提到这一点,在一些c程序员开始有任何想法之前,c/c++中是没有定义的。似乎c的语义不够复杂,这与其他答案(5和7)相矛盾,可能是不正确的。