实际上
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.
操作符都是方法的重载,是方法的调用