【问题标题】:How does Java go about evaluating something like this step by step? [duplicate]Java 如何一步一步地评估这样的东西? [复制]
【发布时间】:2012-04-11 14:47:37
【问题描述】:

可能重复:
What are the rules for evaluation order in Java?

a = f(b) * - d + e++ + f(e)

只是好奇这将如何逐步评估,我在哪里可以找到这样做的规则?

【问题讨论】:

标签: java


【解决方案1】:

第二次编辑:我的回答显然是错误的,请参阅 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.
  • 方法调用没有链接到那里;它们有返回值,因此应该作为变量进行评估。
  • 在您的示例 Niklas 中,乘法是在哪里完成的?
  • @Niklas:我不完全理解;运算符的优先顺序决定了可能被认为是最小的子表达式,这是评估必须开始的地方,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2012-05-16
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多