post 的评估和 java 中的预增量

Evaluation of post and pre increment in java

计算以下 Java 表达式,如果 k=3、l=5 且 m=10:

++m + l - l + m + k++

答案是:

    (++10) +5 -5 +10 +3

    =11 +5 -5 +10 +3

    =24

或者,这会被评估为:

11 +5 -5 +11 +3

哪个结果为 25?

简单证明:IDEone(或任何本地IDE或JDK)

或者只使用 jshell:

或玩computer/JVM(我知道有点棘手):

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

Java 语言规范 15.7.1. Evaluate Left-Hand Operand First:

The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.

give 表达式等价于 ((((++m) + l) - l) + m) + (k++)。第二次加法的左侧操作数是 ((++m) + l) -l,右侧是 m:计算左侧的操作数导致 m 之前递增 ] 评估右边的 (m)。

最好(也)从官方来源学习而不是流行站点...

很明显你将永远不会写这样的表达式 - 除非你想混淆任何其他开发人员(最终你自己 就像那个网站:-))