Scala的操作符

实际上 Scala 中没有操作符,每个操作符的调用都是对方法(函数)的调用。有两种方式来调用一个方法,要么用 . 或者用空格:
val a,b=1 
a + b //+作为方法调用,中缀表达式写法 
a.+(b) //典型的方法调用,与上面等价
Int + 方法的定义:

一、算术操作符

运算符
运算
范例
结果
+
正号
+3
3
-
负号
b=4; -b
-4
+
5+5
10
-
6-4
2
*
3*4
12
/
5/5
1
%
取模 ( 取余 )
7%5
2
+
字符串相加
“He”+”llo”
“Hello”
scala> val res1 = 1.2+1.3 
res1: Double = 2.5

scala> val res2 = 1.2 - 1.3 
res2: Double = -0.10000000000000009 

scala> val res3 = 1.3*1.3 
res3: Double = 1.6900000000000002 

scala> val res4 = 18/8 
res4: Int = 2 

scala> val res5 = 18.0/8 
res5: Double = 2.25 

scala> val res6 = 18%8 
res6: Int = 2 

scala> val res7 = 18.0%8 
res7: Double = 2.0 

scala> val res7 = 18.0%7.5 
res7: Double = 3.0 

scala> -res7 //一元操作符,函数定义:Int#unary_- 
res4: Double = -3.0 

scala> +res7 
res5: Double = 3.0 

scala> val res8 = "1000"+"phone" 
res8: String = 1000phone

二、关系操作符

运算符
运算
范例
结果
==
相等于
4==3
false
!=
不等于
4!=3
true
<
小于
4<3
false
>
大于
4>3
true
<=
小于等于
4<=3
false
>=
大于等于
4>=3
true
scala> val res1 = 1 < 2
res1: Boolean = true 

scala> val res2 = 1 > 2 
res2: Boolean = false 

scala> val res2 = 1.0 > 2.0 
res2: Boolean = false 

scala> val res2 = 1.0 > 2 
res2: Boolean = false 

scala> val res3 = 1.0 >= 2 
res3: Boolean = false 

scala> val res3 = 1.0 <= 2 
res3: Boolean = true 

scala> val res4 = "1000">"phone" 
res4: Boolean = false 

scala> val res5 = 'a'>'A' 
res5: Boolean = true 

scala> val res5 = 'a'>"qianfeng" 
<console>:11: error: overloaded method value > with alternatives: 
    (x: Double)Boolean <and> 
    (x: Float)Boolean <and> 
    (x: Long)Boolean <and> 
    (x: Int)Boolean <and> 
    (x: Char)Boolean <and> 
    (x: Short)Boolean <and> 
    (x: Byte)Boolean 
cannot be applied to (String) 
    val res5 = 'a'>"qianfeng" 
                  ^ 

scala> val res6 = 1 != 1 
res6: Boolean = false 

scala> val res6 = 1 == 1 
res6: Boolean = true 

scala> val res6 = 1 == 1.0 
res6: Boolean = true 

scala> val res7 = 1.==(1) 
res7: Boolean = true

三、逻辑操作符

运算符
描述
实例
&&
逻辑与
(A && B) 运算结果为 false
||
逻辑或
(A || B) 运算结果为 true
!
逻辑非
!(A && B) 运算结果为 true
scala> val toBe = true 
toBe: Boolean = true 

scala> val notToBe = false 
notToBe: Boolean = false 

scala> val res1 = toBe && notToBe 
res1: Boolean = false 

scala> val res1 = toBe || notToBe 
res1: Boolean = true 

scala> val res2 = !toBe 
res2: Boolean = false 

scala> val res3 = 1>2 && 2>3 
res3: Boolean = false 

scala> val res4 = toBe.&&(notToBe) 
res4: Boolean = false

四、位操作符

运算
描述
实例
&
按位与运算符
(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
补运算符 ~ ,是一元的,具有 翻转 位的效应。
带符号右移 >> 。正数右移高位补 0 ,负数右移高位补 1
无符号右移 >>> 。无论是正数还是负数,高位通通补 0
scala> val res1 = 1 & 1 
res1: Int = 1 

scala> val res1 = 1 & 2
res1: Int = 0 

scala> val res1 = 1 | 2 
res1: Int = 3 

scala> val res2 = ~ 1 
res2: Int = -2 

scala> val res3 = 1 >> 2 
res3: Int = 0 

scala> val res3 = 1 << 2 
res3: Int = 4

五、赋值运算符

=    +=   - =   *=   /=   %=   <<=   >>=   &=   ^=   |=
其中 += 等这些操作只适用于 var 变量赋值。

 

运算符
描述
实例
<<=
左移后赋值
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> var a = 10 
a: Int = 10

scala> a += 10 

scala> a 
res7: Int = 20 

cala> a = a+10 
a: Int = 30 

scala> a <<= 2 

scala> a 
res9: Int = 120 

scala> a = a<<2 
a: Int = 480 

scala> a |=2 

scala> a 
res11: Int = 482

六、运算符优先级

分类
运算符
关联性
后缀
()  []
左到右
一元
!   ~
右到左
乘法
*   /   %左到右
加法
+    -
左到右
位移
<<   >>   >>>
左到右
关系
<   <=   >   >=
左到右
等于
==   !=
左到右
按位与
&
左到右
左到右
^
左到右
按位或
|
左到右
逻辑与
&&
左到右
逻辑或
||
左到右
赋值
=   +=    - =   *=   /=   %=   <<=   >>=   &=   ^=   |=
右到左
操作符小结
# 1. a + b 等价于 a.+(b)
# 2. Scala 没有 ++ -- 可以用 += -= 代替
# 3. 操作符都是方法的重载,是方法的调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值