在 Scala 中,运算符用于对数据执行各种操作。Scala 的运算符与其他编程语言中的大部分相似,但它还支持一些特性,如运算符重载、函数式编程中的高阶运算符等。Scala 的运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符等,此外,Scala 还允许开发者自定义运算符。


📖 目录

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 赋值运算符
  5. 位运算符
  6. 运算符重载
  7. 高阶运算符
  8. 参考资料

1. 算术运算符

算术运算符用于执行数学计算,如加法、减法、乘法、除法等。

运算符描述示例
+加法5 + 3 结果是 8
-减法5 - 3 结果是 2
*乘法5 * 3 结果是 15
/除法5 / 3 结果是 1(整数除法)
%取余5 % 3 结果是 2
++自增无直接自增运算符(使用 x = x + 1
--自减无直接自减运算符(使用 x = x - 1

示例:

val a = 10
val b = 3

println(a + b)  // 输出:13
println(a - b)  // 输出:7
println(a * b)  // 输出:30
println(a / b)  // 输出:3
println(a % b)  // 输出:1


2. 关系运算符

关系运算符用于比较两个值,返回布尔值(truefalse)。

运算符描述示例
==等于a == b 比较 ab 是否相等
!=不等a != b 比较 ab 是否不相等
>大于a > b 比较 a 是否大于 b
<小于a < b 比较 a 是否小于 b
>=大于等于a >= b 比较 a 是否大于或等于 b
<=小于等于a <= b 比较 a 是否小于或等于 b

示例:

val a = 10
val b = 5

println(a == b)   // 输出:false
println(a != b)   // 输出:true
println(a > b)    // 输出:true
println(a < b)    // 输出:false
println(a >= b)   // 输出:true
println(a <= b)   // 输出:false


3. 逻辑运算符

逻辑运算符用于连接布尔值,常用于控制流和条件判断。

运算符描述示例
&&逻辑与a && b 如果 ab 都为 true,则返回 true
``
!逻辑非!a 如果 atrue,则返回 false,反之亦然

示例:

val a = true
val b = false

println(a && b)  // 输出:false
println(a || b)  // 输出:true
println(!a)      // 输出:false


4. 赋值运算符

赋值运算符用于给变量赋值。Scala 中的赋值通常通过 = 完成。

运算符描述示例
=赋值a = 55 赋给 a

示例:

var x = 10
x = 20  // x 的值被更新为 20
println(x)  // 输出:20


5. 位运算符

位运算符用于对二进制位进行操作,通常用于底层编程或与硬件交互的应用中。

运算符描述示例
&按位与a & bab 进行按位与运算
``按位或
^按位异或a ^ bab 进行按位异或运算
~按位取反~aa 进行按位取反运算
<<左移a << 2a 的位左移两位
>>右移a >> 2a 的位右移两位
>>>无符号右移a >>> 2a 的位无符号右移两位

示例:

val a = 5   // 二进制:0101
val b = 3   // 二进制:0011

println(a & b)   // 输出:1  (二进制:0001)
println(a | b)   // 输出:7  (二进制:0111)
println(a ^ b)   // 输出:6  (二进制:0110)
println(~a)      // 输出:-6 (二进制:...11111010)
println(a << 1)  // 输出:10 (二进制:1010)
println(a >> 1)  // 输出:2  (二进制:0010)


6. 运算符重载

Scala 支持运算符重载。通过定义特殊的方法,开发者可以改变某些运算符的行为。Scala 中的运算符实际上是方法调用,因此可以重载它们。

示例:

class Point(val x: Int, val y: Int) {
  def +(other: Point): Point = new Point(this.x + other.x, this.y + other.y)
}

val p1 = new Point(2, 3)
val p2 = new Point(4, 5)
val p3 = p1 + p2  // 调用了 Point 类的 `+` 方法
println(s"New point: (${p3.x}, ${p3.y})")  // 输出:New point: (6, 8)

在这个例子中,+ 运算符被重载为执行两个点的坐标相加。


7. 高阶运算符

在 Scala 中,函数和运算符可以是高阶的,可以作为参数传递给其他函数或从函数中返回。这使得运算符具有更大的灵活性和表达能力。

示例:

val numbers = List(1, 2, 3, 4, 5)
val result = numbers.filter(_ > 3).map(_ * 2)

println(result)  // 输出:List(8, 10)

在这个例子中,filtermap 是高阶运算符,它们接收函数作为参数,并应用到集合中的每个元素。


8. 参考资料


通过理解和运用 Scala 中的运算符,开发者能够更高效地处理数据和控制流,同时可以通过运算符重载进一步提高代码的可读性和灵活性。