一个运算符是一个符号,用于告诉编译器来执行指定的数学运算和逻辑运算。
Scala 含有丰富的内置运算符,包括以下几种类型:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
今天我来讲解前几种
1.算术运算符
- +相当于调用对应类型的+方法 ;
- -相当于调用对应类型的-方法 ;
- 相当于调用对应类型的*方法 ;
- /相当于调用对应类型的/方法 ;
- %相当于调用对应类型的%方法 ;
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) );
2.关系运算符
注: 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)
3.逻辑运算符
scala中的逻辑运算与Java中的一样,也是与、或、非三种:
- 与:运算表达式有一个为假,则整个表达式为假
- 或:运算表达式有一个为真,则整个表达式为真
- 非:就是取反,与参与表达式相反
println( 1>2 && 2>1)
println( 3<5 || 5>3)
println( !(2>1))
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()
位运算符
例:
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去补
位运算法则
- 对于按位与运算,只有运算符两边同为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)