Java中带加法的post增量
我有以下java代码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为
int x=5;
System.out.println(x++ + ++x);
输出为12
我想应该是11点
我们这里有三家运营商:
添加+
(post)++
(预)++
- 列表项
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)相矛盾,可能是不正确的。