java中增量后和增量前的评估
如果k=3、l=5和m=10,则计算以下Java表达式:java中增量后和增量前的评估,java,pre-increment,Java,Pre Increment,如果k=3、l=5和m=10,则计算以下Java表达式: ++m + l - l + m + k++ 答案是: (++10) +5 -5 +10 +3 =11 +5 -5 +10 +3 =24 或者,这将被评估为: 11 +5 -5 +11 +3 哪个结果是25?简单证明:(或任何本地IDE或JDK) 或者直接使用jshell: 或者玩电脑/JVM(我知道有点棘手): Java语言规范: 在计算右操作数的任何部分之前,二元运算符的左操作数似乎已被完全计算 gi
++m + l - l + m + k++
答案是:
(++10) +5 -5 +10 +3
=11 +5 -5 +10 +3
=24
或者,这将被评估为:
11 +5 -5 +11 +3
哪个结果是25?简单证明:(或任何本地IDE或JDK)
或者直接使用jshell
:
或者玩电脑/JVM(我知道有点棘手):
Java语言规范:
在计算右操作数的任何部分之前,二元运算符的左操作数似乎已被完全计算
give表达式等价于((++m)+l)-l)+m)+(k++)
。第二次加法的左手操作数是(++m)+l)-l
,右手操作数是m
:计算左手操作数,结果是m
在计算右手操作数(m
)之前递增
更好地(也)从官方渠道学习,而不仅仅是从流行网站学习…和
显然,你将永远不会写这样的表达方式,除非你想迷惑其他开发者(最终你自己也会像该网站的作者一样:-))运行它并找出答案?我找到了,结果是25。答案来自哪里?不是
11+5-5+10+3
?所以你正在使用堆栈溢出作为其他“热门站点”的验证服务吗?您将使用什么来验证堆栈溢出?这个过程在哪里结束?你所引用的特定站点错误百出:但即使不是,也不是Java语言规范,Java语言规范是你唯一应该查找此类信息的地方。在紧要关头,Oracle Java教程。您引用的页面对问题2、3、7、10、11、14、20、26、27、33、38、40、41、48、49的答案不正确、可疑或过时,其中一些问题完全没有意义。非常感谢您的解释,我一定会落实您的建议。。。。
expression k l m expression-result
k = 3 3 ? ? 3 (result not used)
l = 5 3 5 ? 5 (")
m = 10 3 5 10 10 (")
++m 3 5 11 11 (after increment)
l 3 5 11 5
l 3 5 11 5
m 3 5 11 11
k++ 4 5 11 3 (before increment)
11+5-5+11+3 4 5 11 25