【发布时间】:2012-04-11 14:47:37
【问题描述】:
a = f(b) * - d + e++ + f(e)
只是好奇这将如何逐步评估,我在哪里可以找到这样做的规则?
【问题讨论】:
-
@Chuck:不是真的。该文档只讨论了运算符的评估顺序。
标签: java
a = f(b) * - d + e++ + f(e)
只是好奇这将如何逐步评估,我在哪里可以找到这样做的规则?
【问题讨论】:
标签: java
第二次编辑:我的回答显然是错误的,请参阅 cmets 中提供的问题链接 Adam Liss(现在已移至问题本身,请参阅“可能重复”)。对于 Niklas 提供的详细信息,我将在此处留下我的答案,以及我的(不正确的)答案,看看是什么激发了 cmets。
如果我没记错的话,评估树是根据the order of operator precedence 构建的,然后进行相应的评估。不过,方法调用应该是首先要评估的,因为表达式中可能需要返回值。
编辑:评估(假设总和确实是从左到右评估的)看起来像这样(称为 t 的“中间值”是每一步之后的当前值):
evaluate f(b)
calculate t = f(b) - d
calculate t = t + e (since it's e++ and not ++e)
evaluate e++
evaluate f(e)
calculate t = t + f(e)
assignment a = t
【讨论】:
e++ 将在 f(e) 之前进行评估。 Quick demo.