运算符
Scala 运算符和 Java 运算符基本相同,只有个别细节上差异。
算术运算符
基本语法:
| 运算符 | 运算 | 示例 |
|---|---|---|
+ |
正号、加号、字符串拼接 | +31+2"aaa"+"bbb" |
- |
负号、减号 | -14-2 |
* |
乘号 | 2*3 |
/ |
除号 | 10/5 |
% |
取模(取余) | 9%2 |
:::info
对于除号/:如果是整数之间做除法,则只保留整数部分,舍弃小数部分。
:::
关系运算符
和Java一样,常用的关系运算符有:==、!=、<、>、<=、>=
Scala中,两个字符串判断相等时和Java不同,即使重新new了个字符串对象,依然会返回相等:
val str1: String = "hello"val str2: String = new String("hello")println(str1 == str2) // 返回trueprintln(str1.equals(str2)) // 返回true
Scala中判断两个对象的引用地址是否相等,需要使用eq方法进行判断:
println(str1.eq(str2)) // 返回false
逻辑运算符
赋值运算符
和Java基本一样,赋值运算符有:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
但是 Scala 中没有 ++、—操作。
位运算符
和Java一样,位运算符:&、|、^、~(按位取反)、<<、>>、>>>(无符号右移)
Scala运算符本质
Scala中的运算符的本质是对象的方法调用。
示例:
val a: Int = 1val b: Int = 2println(a + b)println(a.+(b)) // a + b 实际上是 a.+(b),调用的a对象的+方法。
Scala中允许使用纯操作符作为标识符,也就是为了可以自定义操作符方法。
例如在Int类中有:
final abstract class Int private extends AnyVal {def +(x: String): Stringdef <<(x: Int): Intdef <<(x: Long): Int// .....}
另外,不止是 a.+(b)可以简写为a + b,Scala中的其他方法也可以省略. ,而改用空格进行调用:
val a: Int = 1val b: Int = 2println(a.+(b))println(a + b)println(a toString()) // a.toString() 的点改为空格调用println(a toString) // 对于无参的toString(),还可以省略括号println(7.5 toInt toString) // 可以连续的进行调用,将点改为空格后,更符合英文的自然语言语法
