切入正题,答案是“s是20,t不能确定”。 我了解s是20的部分,但为什么t不能确定? 请帮帮我!考虑下面的代码:“int s = 20; int t = s ++ + --s;”。 s和t的值是什么?
回答
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()的调用可能有副作用,如果以相反的顺序调用,副作用会有所不同。
你可能想解释一个小_why_你正在计算,因为你这样做(即从左到右,而不是左到的例子) – 2013-02-11 07:28:45
@JoachimIsaksson我编辑了我的答案,如你所说。谢谢 – 2013-02-11 10:07:29
读this:
由于递增/递减操作者修改其操作数,使用的 这样的操作数多于一次相同的表达式中可以产生 不确定的结果。例如,在诸如x - ++ x的表达式中,不应以什么顺序执行减法运算符和增量运算符 ,这是不清楚的。当编译器应用 优化时,这种情况会变得更糟,这可能会导致 操作的执行顺序与 程序员的预期不同。
现在,你的答案应该很清楚。 在我看来,t的值可能因编译器/优化而异。
下面是更多的一些信息: http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions
这个答案适用于C/C++,但不适用于Java。 http://stackoverflow.com/a/4978933/477878 – 2013-02-11 07:12:30
- 1. s = s + s和s + = s之间的区别短
- 2. 在Perl中,s/^ \ s + //和s/s + $ //有什么区别?
- 3. Pandas group by weekday(M/T/W/T/F/S/S)
- 4. s ++和* s ++有什么区别吗?
- 5. \ s和\ t有什么区别?
- 6. 什么!s || !*的意思? (S是char *)
- 7. 为什么下面的代码打印出“S更大”,即使s更小?
- 8. IIS cgi:“%s”的含义是什么%s
- 9. 为什么不是[\\ s *]等同于\\ s *?
- 10. “无法推断(MARRAY(STUArray S)INT(ST S))从上下文()” 将runST
- 11. Emacs revert-buff(s-u):什么是s-u?
- 12. “pacman -S”中的“-S”代表什么?如果是这样,什么?
- 13. 什么是“S”,在“故宫我-S”
- 14. 什么是#用%s
- 15. char * s和char * s有什么区别?
- 16. 考虑边缘权重的最小s-t边缘切割
- 17. 如果存在从S到T的身份转换,那么S和T是否是同一类型?
- 18. 这是什么意思<S extends T> save(S entity);在Spring Repository中?
- 19. 差(/ \ S /)和$ .TYPE(/ \ s /)
- 20. * t ++ = * s ++;字符串拷贝
- 21. SVG路径命令“s”和“t”
- 22. string s; &s+1;法律? UB?
- 23. 什么是NamedPipeServerStream和NamedPipeClientStream(s)?
- 24. 什么是%s和%d?
- 25. Golang什么是“%!s”
- 26. 正则表达式\\ s *,\\ s *做什么?
- 27. 的Java:(INT)(浮点)Float.valueOf(S)或Float.valueOf(S).toInt()
- 28. Apache-Error:[file“apache2_util.c”] [line 271] [level 3] [client%s] ModSecurity:%s%s [uri“%s”]%s
- 29. printf(“%s”),printf(“%ls”),wprintf(“%s”)和wprintf(“%ls”)有什么区别?
- 30. [\ s \ S] *之间的区别是什么?和。*?
你在哪里找到你给的答案吗? – 2013-02-11 06:57:43
't'可以确定:http://ideone.com/6ja0Kv – 2013-02-11 06:57:58
您是否想过,哦,我不知道,试试看看? “不能确定”是......废话。 – 2013-02-11 06:59:22