📅  最后修改于: 2023-12-03 15:05:04.863000             🧑  作者: Mango
在Scala中,不同的运算符有不同的优先级。当表达式中包含多个运算符时,Scala会按照一定的规则进行结合和计算,这些规则称为运算符的优先级。
Scala中的运算符按照从高到低的优先级排列如下:
| 优先级 | 运算符 | 结合性 |
| ------ | ------------------------------------ | -------- |
| 1 | ()
| 左结合 |
| 2 | + - ! ~ ++ --
| 右结合 |
| 3 | * / %
| 左结合 |
| 4 | + -
| 左结合 |
| 5 | << >> >>>
| 左结合 |
| 6 | < <= > >= instanceof
| 左结合 |
| 7 | == !=
| 左结合 |
| 8 | &
| 左结合 |
| 9 | ^
| 左结合 |
| 10 | |
| 左结合 |
| 11 | &&
| 左结合 |
| 12 | ||
| 左结合 |
| 13 | =
| 右结合 |
运算符的结合性指的是当表达式中多个运算符出现时,它们的计算顺序是如何确定的。Scala中的运算符可以是左结合或右结合。
左结合的运算符按照从左至右的顺序进行计算,例如 1 + 2 + 3
相当于 (1 + 2) + 3
,先计算左边的表达式再计算右边的表达式。
右结合的运算符按照从右至左的顺序进行计算,例如 a = b = 1
相当于 a = (b = 1)
,先计算右边的表达式再计算左边的表达式。
以下是一些示例程序,演示了Scala中运算符优先级和结合性的使用。
// 左结合的运算符
val result1 = 1 + 2 + 3 * 4 // 结果为 15,先计算乘法再计算加法
val result2 = "hello" + " " + "world" // 结果为 "hello world",先计算左边的加法再计算右边的加法
// 右结合的运算符
var a = 1
var b = 2
var result3 = a = b = 3 // 结果为 3,先计算右边的赋值,再计算左边的赋值
// 括号的优先级最高
val result4 = (1 + 2) * 3 // 结果为 9,先计算括号内的加法再计算乘法
val result5 = (1 + 2) * (3 + 4) // 结果为 21,先计算括号内的加法再计算括号外的乘法