运算符

Scala 运算符和 Java 运算符基本相同,只有个别细节上差异。

算术运算符

基本语法:

运算符 运算 示例
+ 正号、加号、字符串拼接 +3
1+2
"aaa"+"bbb"
- 负号、减号 -1
4-2
* 乘号 2*3
/ 除号 10/5
% 取模(取余) 9%2

:::info 对于除号/:如果是整数之间做除法,则只保留整数部分,舍弃小数部分。 :::

关系运算符

和Java一样,常用的关系运算符有:==!=<><=>=

Scala中,两个字符串判断相等时和Java不同,即使重新new了个字符串对象,依然会返回相等:

  1. val str1: String = "hello"
  2. val str2: String = new String("hello")
  3. println(str1 == str2) // 返回true
  4. println(str1.equals(str2)) // 返回true

Scala中判断两个对象的引用地址是否相等,需要使用eq方法进行判断:

  1. println(str1.eq(str2)) // 返回false

逻辑运算符

和Java一样,逻辑运算符有:&&||!

赋值运算符

和Java基本一样,赋值运算符有:=+=-=*=/=%=<<=>>=&=^=|=
但是 Scala 中没有 ++、—操作。

位运算符

和Java一样,位运算符:&|^~(按位取反)、<<>>>>>(无符号右移)

Scala运算符本质

Scala中的运算符的本质是对象的方法调用。
示例:

  1. val a: Int = 1
  2. val b: Int = 2
  3. println(a + b)
  4. println(a.+(b)) // a + b 实际上是 a.+(b),调用的a对象的+方法。

Scala中允许使用纯操作符作为标识符,也就是为了可以自定义操作符方法。
例如在Int类中有:

  1. final abstract class Int private extends AnyVal {
  2. def +(x: String): String
  3. def <<(x: Int): Int
  4. def <<(x: Long): Int
  5. // .....
  6. }

另外,不止是 a.+(b)可以简写为a + b,Scala中的其他方法也可以省略. ,而改用空格进行调用:

  1. val a: Int = 1
  2. val b: Int = 2
  3. println(a.+(b))
  4. println(a + b)
  5. println(a toString()) // a.toString() 的点改为空格调用
  6. println(a toString) // 对于无参的toString(),还可以省略括号
  7. println(7.5 toInt toString) // 可以连续的进行调用,将点改为空格后,更符合英文的自然语言语法