表达评估顺序

按照以下规则评估 Java 表达式:

  • 操作数从左到右进行评估。
  • 运算符的操作数在运算符之前进行评估。
  • 根据运算符优先级评估运算符
  • 参数列表从左到右进行评估。

简单的例子

在以下示例中:

int i = method1() + method2();

评估顺序是:

  1. = 运算符的左操作数被计算为 i 的地址。
  2. 计算+运算符(method1())的左操作数。
  3. 计算+运算符(method2())的右操作数。
  4. 评估+操作。
  5. 评估 = 操作,将添加结果分配给 i

请注意,如果可以观察到调用的效果,你将能够观察到在调用 method2 之前调用 method1

具有副作用的运算符的示例

在以下示例中:

int i = 1;
intArray[i] = ++i + 1;

评估顺序是:

  1. 计算 = 运算符的左操作数。这给出了 intArray[1] 的地址。
  2. 评估预增量。这将 1 添加到 i,并评估为 2
  3. 评估了+的右手操作数。
  4. +操作评估为:2 + 1 - > 3
  5. 评估 = 操作,将 3 分配给 intArray[1]

请注意,由于首先评估 = 的左侧操作数,因此它不受++i 子表达式的副作用的影响。

参考: