scala运算符

54 阅读3分钟

一个运算符是一个符号,用于告诉编译器来执行指定的数学运算和逻辑运算。

Scala 含有丰富的内置运算符,包括以下几种类型:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符

今天我来讲解前几种

1.算术运算符

屏幕截图 2025-09-10 151235.png

  • +相当于调用对应类型的+方法 ;
  • -相当于调用对应类型的-方法 ;
  • 相当于调用对应类型的*方法 ;
  • /相当于调用对应类型的/方法 ;
  • %相当于调用对应类型的%方法 ;
var a = 10;
var b = 20;
var c = 25;
var d = 25;
println("a + b = " + (a + b) );
println("a - b = " + (a - b) );
println("a * b = " + (a * b) );
println("b / a = " + (b / a) );
println("b % a = " + (b % a) );
println("c % a = " + (c % a) );

屏幕截图 2025-09-10 152651.png

2.关系运算符

屏幕截图 2025-09-10 153009.png

注: 1.scala中的关系运算符==比较的是数值是否相等,而在Java中,该运算符比较的是引用是否相等

2.scala与java相同,关系运算的返回值都是布尔类型的,若满足比较的要求就返回真(true),若不满足则返回假(false)

var b: Boolean = 1 == 1

println(b)
println(1 != 2)
println(1 > 2)
println(1 < 2)
println(1 >= 2)
println(1 <= 2)

屏幕截图 2025-09-10 153200.png

3.逻辑运算符

屏幕截图 2025-09-10 155016.png

scala中的逻辑运算与Java中的一样,也是与、或、非三种:

  • 与:运算表达式有一个为假,则整个表达式为假
  • 或:运算表达式有一个为真,则整个表达式为真
  • 非:就是取反,与参与表达式相反
println( 1>2 && 2>1)
println( 3<5 || 5>3)
println( !(2>1))

屏幕截图 2025-09-10 155000.png

4.短路运算

短路运算核心思路:由&&或||运算符构建出来的表达式,只会对整个运算结果有决定作用的地方进行求值

scala短路运行法则:

  • 运算符为&&时:如果表达式1为false,则result=false,也就是说此时表达式1能够决定整个与运算的值,因此不会再去求表达式2的值

  • 运算符为||时:如果表达式1为true,则result=true,也就是说此时表达式1能够决定整个与运算的值,因此不会再去求表达式2的值

def f(): Boolean = {
  println("f")
  false
}

1 > 2 && f()
false
2 > 1 && f()

2 > 1 || f()

屏幕截图 2025-09-10 155541.png

位运算符

屏幕截图 2025-09-15 083830.png

例:

var a =5
var b =4
println("5 & 4 =" + (5&4) )
println("5 | 4 =" + (5|4) )
println("5 ^ 4 =" + (5^4) )
println("4 >> 2 =" + (4>>2) )
println("4 << 2 =" + (4<<2) )
  • 使用右移动运算符>>和无符号右移运算符>>>都可以对位进行右移,这时会将高位空出,低位直接截断

区别:使用右移动运算符时,高位空出的位置用符号位去补,正数补0,负数补1;使用无符号右移运算符时,高位空出的位置都用0去补

位运算法则

屏幕截图 2025-09-15 084045.png

  • 对于按位与运算,只有运算符两边同为1的时候整体结果才是1,其他情况都是0
  • 对于按位或运算,只有运算符两边同为0的时候整体结果才是0,其他情况都是1
  • 对于按位异或运算(即同为1或同为0)时整体结果为0,,运算符两边结果不相同时整体结果为1
val a =true
val b =false
val c =false
println(a || b && c)
println(a || (b && c))
// 先算 &&,后算 || ===> true
println((a || b) && c)

屏幕截图 2025-09-15 091532.png