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