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

如果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语言规范:

在计算右操作数的任何部分之前,二元运算符的左操作数似乎已被完全计算

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