考虑一下这段代码:" int s = 20; int t = s ++ + --s;"。 s和t的值是多少?

时间:2013-02-11 06:53:40

标签: java operator-keyword increment decrement

切入追逐,答案是“s是20,t无法确定。” 我理解s是20的部分,但为什么不能确定? 请帮帮我!

2 个答案:

答案 0 :(得分:2)

int s = 20; 
int t = s++ + --s;

工作:递增(后递增)s到21(当前值20)+递减(递减)s到20(当前值20)。

So, t=20+20;
And s =20;

在考虑优先级和括号后,Java保证表达式将从左到右进行计算。例如,要评估eat()+ drink() - beMerry(),Java将首先评估eat(),然后drink(),然后执行添加,然后评估beMerry(),最后执行减法。 eat()在drink()之前进行评估,因为eat()在drink()的左边,表达式从左到右进行评估。这种保证很重要,因为eat()和drink()的调用可能会产生副作用,如果以相反的顺序调用它们会有所不同。

答案 1 :(得分:0)

阅读this

  

由于递增/递减运算符修改其操作数,因此使用   这样的操作数不止一次在同一个表达式中就可以产生   未定义的结果。例如,在诸如x - ++ x的表达式中,它是   不清楚减法和增量运算符的顺序   应该执行。这样的情况甚至更糟   编译器应用优化,这可能导致   操作的执行顺序不同于   程序员打算。

现在,您的回答应该非常明确。 听起来像t的值可能因编译器/优化而异。

以下是一些更多信息: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions