表达评估顺序
按照以下规则评估 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
子表达式的副作用的影响。
参考: