第3章 运算符
scala运算符的使用和Java运算符的使用基本相同,只有个别细节上不同。
3.1 算数运算符
下表列出了 Scala 支持的算术运算符。
假定变量 A 为 10,B 为 20:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加号 | A + B 运算结果为 30 |
- | 减号 | A - B 运算结果为 -10 |
* | 乘号 | A * B 运算结果为 200 |
/ | 除号 | B / A 运算结果为 2 |
% | 取余 | B % A 运算结果为 0 |
3.2 关系运算符
下表列出了 Scala 支持的关系运算符。
假定变量 A 为 10,B 为 20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 | (A == B) 运算结果为 false |
!= | 不等于 | (A != B) 运算结果为 true |
> | 大于 | (A > B) 运算结果为 false |
< | 小于 | (A < B) 运算结果为 true |
>= | 大于等于 | (A >= B) 运算结果为 false |
<= | 小于等于 | (A <= B) 运算结果为 true |
思考一个问题:如下代码执行结果如何?
object Scala01_Oper {
def main(args: Array[String]): Unit = {
// TODO 运算符
val s1 = new String("abc")
//val s1 : String = null
val s2 = new String("abc")
// 马丁想:判断两个对象的内存地址的意义
// 判断对象是否相等,双等号会更加直观
// scala语法中双等号就是比较对象的内容,但是和equals不一样。是非空equals操作
println( s1 == s2 )
println( s1.equals(s2) )
println( s1.eq(s2) ) //false eq方法在编译后就是java中的双等号 比较的是地址,因此不同
val s = "abc" 2
println(s)
}
}
3.3 赋值运算符
以下列出了 Scala 语言支持的赋值运算符:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算,指定右边操作数赋值给左边的操作数。 | C = A + B 将 A + B 的运算结果赋值给 C |
+= | 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 | C += A 相当于 C = C + A |
-= | 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 | C -= A 相当于 C = C - A |
*= | 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 | C *= A 相当于 C = C * A |
/= | 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 | C /= A 相当于 C = C / A |
%= | 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 | C %= A is equivalent to C = C % A |
<<= | 按位左移后再赋值 | C <<= 2 相当于 C = C << 2 |
>>= | 按位右移后再赋值 | C >>= 2 相当于 C = C >> 2 |
&= | 按位与运算后赋值 | C &= 2 相当于 C = C & 2 |
^= | 按位异或运算符后再赋值 | C ^= 2 相当于 C = C ^ 2 |
|= | 按位或运算后再赋值 | C |= 2 相当于 C = C | 2 |
思考一个问题:为什么在上面的运算符中没有看到 ++, --?
++运算有歧义,容易理解出现错误,所以scala中没有这样的语法,所以采用 +=的方式来代替。
3.4 逻辑运算符
下表列出了 Scala 支持的逻辑运算符。
假定变量 A 为 1,B 为 0:
运算符 | 描述 | 实例 |
---|---|---|
&& | 逻辑与 | (A && B) 运算结果为 false |
|| | 逻辑或 | (A || B) 运算结果为 true |
! | 逻辑非 | !(A && B) 运算结果为 true |
3.5 位运算符
如果指定 A = 60; 及 B = 13; 两个变量对应的二进制为
A = 0011 1100
B = 0000 1101
Scala 中的按位运算法则如下:
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
>>> | 无符号右移 | A >>>2 输出结果 15, 二进制解释: 0000 1111 |
思考一个问题:位运算有啥用?你用过吗或你接触过吗?
3.6 运算符本质
在Scala中其实是没有运算符的,所有运算符都是方法。
- scala是完全面向对象的语言,所以数字其实也是对象
- 当调用对象的方法时,点.可以省略
- 如果函数参数只有一个,或者没有参数,()可以省略
object Scala02_Oper {
def main(args: Array[String]): Unit = {
// TODO 运算符
// scala是一个完全面向对象的语言,数字也是对象
val r = 10.+(10)
val j = 10 + 10
val k = "abc".*(2)
// 马丁想
// 1. 方法在调用时,可以省略点
// 2. 方法如果参数只有一个或没有,那么小括号可以省略
val user = new User()
println(user toString()) //省略 点.
println(user toString) //省略括号() 和点 .
println(user.toString) // 省略括号 ---常用
}
}
```## 尚硅谷2022Java大数据线下面授班 完结
<img src="http://typora-markdown-2022.oss-cn-shanghai.aliyuncs.com/uPic/2022/06/11/image-20220611100332425.png" alt="image-20220611100332425" style="zoom: 50%;" />
链接: https://pan.baidu.com/s/1vcN1-S5st3azs_VRmxXMAg 提取码: s3vj
失效加V:x923713
## QQ交流群 欢迎加入690763341
<img src="http://typora-markdown-2022.oss-cn-shanghai.aliyuncs.com/uPic/2022/06/11/image-20220611100658881.png" alt="image-20220611100658881" style="zoom:50%;" />