表达评估顺序
按照以下规则评估 Java 表达式:
- 操作数从左到右进行评估。
- 运算符的操作数在运算符之前进行评估。
- 根据运算符优先级评估运算符
- 参数列表从左到右进行评估。
简单的例子
在以下示例中:
int i = method1() + method2();
评估顺序是:
=运算符的左操作数被计算为i的地址。- 计算
+运算符(method1())的左操作数。 - 计算
+运算符(method2())的右操作数。 - 评估
+操作。 - 评估
=操作,将添加结果分配给i。
请注意,如果可以观察到调用的效果,你将能够观察到在调用 method2 之前调用 method1。
具有副作用的运算符的示例
在以下示例中:
int i = 1;
intArray[i] = ++i + 1;
评估顺序是:
- 计算
=运算符的左操作数。这给出了intArray[1]的地址。 - 评估预增量。这将
1添加到i,并评估为2。 - 评估了
+的右手操作数。 +操作评估为:2 + 1- >3。- 评估
=操作,将3分配给intArray[1]。
请注意,由于首先评估 = 的左侧操作数,因此它不受++i 子表达式的副作用的影响。
参考: