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
)。
最好(也)从官方来源学习而不是仅从流行站点...
和
很明显你将永远不会写这样的表达式 - 除非你想混淆任何其他开发人员(最终你自己 就像那个网站:-))
计算以下 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
)。
最好(也)从官方来源学习而不是仅从流行站点...
和
很明显你将永远不会写这样的表达式 - 除非你想混淆任何其他开发人员(最终你自己 就像那个网站:-))