运算符优先权
当表达式包含多个运算符时,可能会以不同的方式读取它。例如,可以通过两种方式读取数学表达式 1 + 2 x 3
:
- 添加
1
和2
并将结果乘以3
。这给出了答案9
。如果我们添加括号,这看起来像( 1 + 2 ) x 3
。 - 将
1
添加到乘以2
和3
的结果中。这给出了答案7
。如果我们添加括号,这看起来像1 + ( 2 x 3 )
。
在数学中,惯例是以第二种方式阅读表达式。一般规则是在加法和减法之前进行乘法和除法。当使用更高级的数学符号时,要么意思是不言而喻(对于训练有素的数学家!),要么添加括号以消除歧义。在任何一种情况下,符号传达意义的有效性取决于数学家的智慧和共享知识。
Java 基于所使用的运算符的优先级,对如何读取表达式有相同的明确规则。
通常,每个运算符都被赋予优先值; 见下表。
例如:
1 + 2 * 3
+
的优先级低于*
的优先级,因此表达式的结果为 7,而不是 9。
1 Lambda 表达式优先级很复杂,因为它也可以在强制转换后发生,或者作为条件三元运算符的第三部分。