学习链接:https://www.bilibili.com/video/BV1Xh411S7bP?p=28&spm_id_from=pageDriver


1 算术运算符

Scala运算符的使用和Java运算符使用基本相同

  1. object Test01_TestOperator {
  2. def main(args: Array[String]): Unit = {
  3. // 算术运算符
  4. // 整数除法,默认Int
  5. val result1 = 10 / 3
  6. println(result1) // 3
  7. val result2: Double = 10 / 3
  8. println(result2) // 3.0
  9. val result3: Double = 10.0 / 3
  10. println(result3) // 3.3333333333333335
  11. println(result3.formatted("%5.2f")) // 3.33
  12. }
  13. }

QQ截图20220526101140.png

2 关系运算符(比较运算符)

== != < > <= >=

  • Java的== ```java String s1 = “hello”; String s2 = new String(“hello”);

Boolean isEqual = s1 == s2; System.out.println(isEqual); // false 比较地址 System.out.println(s1.equals(s2)); // true 比较内容


- Scala的==
```scala
val s1: String = "hello"
val s2: String = new String("hello")
println(s1 == s2) // true 相当于调用了equals()方法,比较内容
println(s1.equals(s2)) // true
println(s1.eq(s2)) // false 比较地址

3 逻辑运算符

&& || !

object Test01_TestOperator {
  def main(args: Array[String]): Unit = {
    // 判断一个字符串是否为空
    def isNotEmpty(str: String): Boolean = {
      // 短路与,避免字符串为空
      return str != null && !("".equals(str.trim))
    }

    println(isNotEmpty(null)) // false
  }
}

4 赋值运算符

= += -= *= /= %=
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
^= 按位异或后赋值 (异或:相同为0,不同为1)
|= 按位或后赋值
scala中没有++、—操作符

5 位运算符

& | ^ ~
<< 左移运算符 a=60(0000 0000 0011 1100),a<<2,左移两位0000 0000 1111 0000,240
>> 右移运算符 a=60(0000 0000 0011 1100),a>>2,右移两位0000 0000 0000 1111,15
>>> 无符号右移 a=60(0000 0000 0011 1100),a>>>2,右移两位0000 0000 0000 1111,15

object Test01_TestOperator {
  def main(args: Array[String]): Unit = {
    val a: Byte = 60
    println(a << 3) // 480,会自动转成Int,不会溢出

    val b: Short = -13 // 11110011 补码
    println(b << 2) // -52 符号位不变 1100 1100 补码 1011 0100 源码
    println(b >> 2) // -4
    println(b >>> 2) // 1073741820
  }
}

6 Scala运算符本质

Scala中所有运算符都是方法

object Test01_TestOperator {
  def main(args: Array[String]): Unit = {
    val n1: Int = 12
    val n2: Int = 37

    // 加法运算
    println(n1.+(n2))
    // 调用对象的方法时,省略.
    println(n1+(n2))
    // 如果参数只有一个或没有参数,()可以省略
    println(n1+n2)

  }
}