运算符
Scala 运算符和 Java 运算符基本相同,只有个别细节上差异。
算术运算符
基本语法:
运算符 | 运算 | 示例 |
---|---|---|
+ |
正号、加号、字符串拼接 | +3 1+2 "aaa"+"bbb" |
- |
负号、减号 | -1 4-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) // 返回true
println(str1.equals(str2)) // 返回true
Scala中判断两个对象的引用地址是否相等,需要使用eq
方法进行判断:
println(str1.eq(str2)) // 返回false
逻辑运算符
赋值运算符
和Java基本一样,赋值运算符有:=
、+=
、-=
、*=
、/=
、%=
、<<=
、>>=
、&=
、^=
、|=
。
但是 Scala 中没有 ++、—操作。
位运算符
和Java一样,位运算符:&
、|
、^
、~
(按位取反)、<<
、>>
、>>>
(无符号右移)
Scala运算符本质
Scala中的运算符的本质是对象的方法调用。
示例:
val a: Int = 1
val b: Int = 2
println(a + b)
println(a.+(b)) // a + b 实际上是 a.+(b),调用的a对象的+方法。
Scala中允许使用纯操作符作为标识符,也就是为了可以自定义操作符方法。
例如在Int
类中有:
final abstract class Int private extends AnyVal {
def +(x: String): String
def <<(x: Int): Int
def <<(x: Long): Int
// .....
}
另外,不止是 a.+(b)
可以简写为a + b
,Scala中的其他方法也可以省略.
,而改用空格进行调用:
val a: Int = 1
val b: Int = 2
println(a.+(b))
println(a + b)
println(a toString()) // a.toString() 的点改为空格调用
println(a toString) // 对于无参的toString(),还可以省略括号
println(7.5 toInt toString) // 可以连续的进行调用,将点改为空格后,更符合英文的自然语言语法