Scala 運算符
scala 運算符
一個運算符是一個符號,用于告訴編譯器來執(zhí)行指定的數(shù)學(xué)運算和邏輯運算。
scala 含有豐富的內(nèi)置運算符,包括以下幾種類型:
- 算術(shù)運算符
- 關(guān)系運算符
- 邏輯運算符
- 位運算符
- 賦值運算符
接下來我們將為大家詳細(xì)介紹以上各種運算符的應(yīng)用。
1. 算術(shù)運算符
下表列出了 scala 支持的算術(shù)運算符。
假定變量 a 為 10,b 為 20:
運算符 | 描述 | 范例 |
---|---|---|
+ | 加號 | a + b 運算結(jié)果為 30 |
- | 減號 | a - b 運算結(jié)果為 -10 |
* | 乘號 | a * b 運算結(jié)果為 200 |
/ | 除號 | b / a 運算結(jié)果為 2 |
% | 取余 | b % a 運算結(jié)果為 0 |
范例
object test { ? ?def main(args: array[string]) { ? ? ? var a = 10; ? ? ? var b = 20; ? ? ? var c = 25; ? ? ? var d = 25; ? ? ? println("a + b = " + (a + b) ); ? ? ? println("a - b = " + (a - b) ); ? ? ? println("a * b = " + (a * b) ); ? ? ? println("b / a = " + (b / a) ); ? ? ? println("b % a = " + (b % a) ); ? ? ? println("c % a = " + (c % a) ); ? ? ? ? ?} }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac test.scala $ scala test a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5
2. 關(guān)系運算符
下表列出了 scala 支持的關(guān)系運算符。
假定變量 a 為 10,b 為 20:
運算符 | 描述 | 范例 |
---|---|---|
== | 等于 | (a == b) 運算結(jié)果為 false |
!= | 不等于 | (a != b) 運算結(jié)果為 true |
> | 大于 | (a > b) 運算結(jié)果為 false |
< | 小于 | (a < b) 運算結(jié)果為 true |
>= | 大于等于 | (a >= b) 運算結(jié)果為 false |
<= | 小于等于 | (a <= b) 運算結(jié)果為 true |
范例
object test { ? ?def main(args: array[string]) { ? ? ? var a = 10; ? ? ? var b = 20; ? ? ? println("a == b = " + (a == b) ); ? ? ? println("a != b = " + (a != b) ); ? ? ? println("a > b = " + (a > b) ); ? ? ? println("a < b = " + (a < b) ); ? ? ? println("b >= a = " + (b >= a) ); ? ? ? println("b <= a = " + (b <= a) ); ? ?} }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac test.scala $ scala test a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
3. 邏輯運算符
下表列出了 scala 支持的邏輯運算符。
假定變量 a 為 1,b 為 0:
運算符 | 描述 | 范例 |
---|---|---|
&& | 邏輯與 | (a && b) 運算結(jié)果為 false |
|| | 邏輯或 | (a || b) 運算結(jié)果為 true |
! | 邏輯非 | !(a && b) 運算結(jié)果為 true |
范例
object test { ? ?def main(args: array[string]) { ? ? ? var a = true; ? ? ? var b = false; ? ? ? println("a && b = " + (a&&b) ); ? ? ? println("a || b = " + (a||b) ); ? ? ? println("!(a && b) = " + !(a && b) ); ? ?} }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac test.scala $ scala test a && b = false a || b = true !(a && b) = true
4. 位運算符
位運算符用來對二進制位進行操作,~,&,|,^ 分別為取反,按位與,按位或,按位異或運算,如下表范例:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
如果指定 a = 60; 及 b = 13; 兩個變量對應(yīng)的二進制為:
a = 0011 1100 b = 0000 1101 -------位運算---------- a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
scala 中的按位運算法則如下:
運算符 | 描述 | 范例 |
---|---|---|
& | 按位與運算符 | (a & b) 輸出結(jié)果 12 ,二進制解釋: 0000 1100 |
| | 按位或運算符 | (a | b) 輸出結(jié)果 61 ,二進制解釋: 0011 1101 |
^ | 按位異或運算符 | (a ^ b) 輸出結(jié)果 49 ,二進制解釋: 0011 0001 |
~ | 按位取反運算符 | (~a ) 輸出結(jié)果 -61 ,二進制解釋: 1100 0011, 在一個有符號二進制數(shù)的補碼形式。 |
<< | 左移動運算符 | a << 2 輸出結(jié)果 240 ,二進制解釋: 1111 0000 |
>> | 右移動運算符 | a >> 2 輸出結(jié)果 15 ,二進制解釋: 0000 1111 |
>>> | 無符號右移 | a >>>2 輸出結(jié)果 15, 二進制解釋: 0000 1111 |
范例
object test { ? ?def main(args: array[string]) { ? ? ? var a = 60; ? ? ? ? ? /* 60 = 0011 1100 */ ? ? ? ? var b = 13; ? ? ? ? ? /* 13 = 0000 1101 */ ? ? ? var c = 0; ? ? ? c = a & b; ? ? ? ? ? ?/* 12 = 0000 1100 */ ? ? ? println("a & b = " + c ); ? ? ? c = a | b; ? ? ? ? ? ?/* 61 = 0011 1101 */ ? ? ? println("a | b = " + c ); ? ? ? c = a ^ b; ? ? ? ? ? ?/* 49 = 0011 0001 */ ? ? ? println("a ^ b = " + c ); ? ? ? c = ~a; ? ? ? ? ? ? ? /* -61 = 1100 0011 */ ? ? ? println("~a = " + c ); ? ? ? c = a << 2; ? ? ? ? ? /* 240 = 1111 0000 */ ? ? ? println("a << 2 = " + c ); ? ? ? c = a >> 2; ? ? ? ? ? /* 15 = 1111 */ ? ? ? println("a >> 2 ?= " + c ); ? ? ? c = a >>> 2; ? ? ? ? ?/* 15 = 0000 1111 */ ? ? ? println("a >>> 2 = " + c ); ? ?} }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac test.scala $ scala test a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
5. 賦值運算符
以下列出了 scala 語言支持的賦值運算符:
運算符 | 描述 | 范例 |
---|---|---|
= | 簡單的賦值運算,指定右邊操作數(shù)賦值給左邊的操作數(shù)。 | c = a + b 將 a + b 的運算結(jié)果賦值給 c |
+= | 相加后再賦值,將左右兩邊的操作數(shù)相加后再賦值給左邊的操作數(shù)。 | c += a 相當(dāng)于 c = c + a |
-= | 相減后再賦值,將左右兩邊的操作數(shù)相減后再賦值給左邊的操作數(shù)。 | c -= a 相當(dāng)于 c = c - a |
*= | 相乘后再賦值,將左右兩邊的操作數(shù)相乘后再賦值給左邊的操作數(shù)。 | c *= a 相當(dāng)于 c = c * a |
/= | 相除后再賦值,將左右兩邊的操作數(shù)相除后再賦值給左邊的操作數(shù)。 | c /= a 相當(dāng)于 c = c / a |
%= | 求余后再賦值,將左右兩邊的操作數(shù)求余后再賦值給左邊的操作數(shù)。 | c %= a is equivalent to c = c % a |
<<= | 按位左移后再賦值 | c <<= 2 相當(dāng)于 c = c << 2 |
>>= | 按位右移后再賦值 | c >>= 2 相當(dāng)于 c = c >> 2 |
&= | 按位與運算后賦值 | c &= 2 相當(dāng)于 c = c & 2 |
^= | 按位異或運算符后再賦值 | c ^= 2 相當(dāng)于 c = c ^ 2 |
|= | 按位或運算后再賦值 | c |= 2 相當(dāng)于 c = c | 2 |
范例
object test { ? ?def main(args: array[string]) { ? ? ? var a = 10; ? ? ? ? ? ? var b = 20; ? ? ? var c = 0; ? ? ? c = a + b; ? ? ? println("c = a + b ?= " + c ); ? ? ? c += a ; ? ? ? println("c += a ?= " + c ); ? ? ? c -= a ; ? ? ? println("c -= a = " + c ); ? ? ? c *= a ; ? ? ? println("c *= a = " + c ); ? ? ? a = 10; ? ? ? c = 15; ? ? ? c /= a ; ? ? ? println("c /= a ?= " + c ); ? ? ? a = 10; ? ? ? c = 15; ? ? ? c %= a ; ? ? ? println("c %= a ?= " + c ); ? ? ? c <<= 2 ; ? ? ? println("c <<= 2 ?= " + c ); ? ? ? c >>= 2 ; ? ? ? println("c >>= 2 ?= " + c ); ? ? ? c >>= a ; ? ? ? println("c >>= a ?= " + c ); ? ? ? c &= a ; ? ? ? println("c &= 2 ?= " + c ); ? ? ? ? ? ? c ^= a ; ? ? ? println("c ^= a ?= " + c ); ? ? ? c |= a ; ? ? ? println("c |= a ?= " + c ); ? ?} }
執(zhí)行以上代碼,輸出結(jié)果為:
$ scalac test.scala $ scala test c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= a = 0 c &= 2 = 0 c ^= a = 10 c |= a = 10
運算符優(yōu)先級取決于所屬的運算符組,它會影響算式的的計算。
范例: x = 7 + 3 * 2; 這里, x 計算結(jié)果為 13, 而不是 20,因為乘法(*) 高于加法(+), 所以它先計算 3*2 再加上 7。
查看以下表格,優(yōu)先級從上到下依次遞減,最上面具有最高的優(yōu)先級,逗號操作符具有最低的優(yōu)先級。
類別 | 運算符 | 關(guān)聯(lián)性 |
---|---|---|
1 | () [] | 左到右 |
2 | ! ~ | 右到左 |
3 | * / % | 左到右 |
4 | + - | 左到右 |
5 | >> >>> << | 左到右 |
6 | > >= < <= | 左到右 |
7 | == != | 左到右 |
8 | & | 左到右 |
9 | ^ | 左到右 |
10 | | | 左到右 |
11 | && | 左到右 |
12 | || | 左到右 |
13 | = += -= *= /= %= >>= <<= &= ^= |= | 右到左 |
14 | , | 左到右 |
相關(guān)文章
- JDBC 教程
- JDBC 驅(qū)動類型
- JDBC 連接數(shù)據(jù)庫范例
- JDBC 連接數(shù)據(jù)庫步驟
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結(jié)果集
- JDBC Resultset 結(jié)果集范例
- JDBC 事務(wù)保存點范例
- Scala 教程
- Scala 簡介
- Scala 類和對象
- Scala 文件 I/O
- Spring 教程
- Spring 模塊
- Spring 依賴注入
- Spring 自動裝配
- Spring MVC教程
- Spring MVC表單標(biāo)簽庫
- Spring security