簡述scala中標識符的組成(scala運算符)
2023-09-21 22:52:17 3
簡述scala中標識符的組成?用來拼接變量或者常量的符號就叫: 運算符, 而通過運算符連接起來的式子就叫: 表達式. 實際開發中, 我們會經常用到它.,今天小編就來說說關於簡述scala中標識符的組成?下面更多詳細答案一起來看看吧!

簡述scala中標識符的組成
1. 算術運算符1.1 運算符簡介用來拼接變量或者常量的符號就叫: 運算符, 而通過運算符連接起來的式子就叫: 表達式. 實際開發中, 我們會經常用到它.
例如:
10 3 這個就是一個表達式, 而 號, 就是一個運算符.
注意: 在Scala中, 運算符並不僅僅是運算符, 也是函數的一種
1.2 運算符的分類算術運算符賦值運算符關係運算符邏輯運算符位運算符注意: Scala中是沒有三元運算符的, 被if-else給替代了.1.3 算術運算符算術運算符指的就是用來進行算術操作的符號, 常用的有以下幾種:
運算符 | 功能解釋 |
加號, 功能有3點. 1) 表示正數 2) 普通的加法操作 3) 字符串的拼接 | |
- | 減號, 功能有2點. 1) 表示負數 2) 普通的減法操作 |
* | 乘號, 用於獲取兩個數據的乘積 |
/ | 除法, 用於獲取兩個數據的商 |
% | 取餘(也叫取模), 用於獲取兩個數據的餘數 |
注意:
Scala中是沒有 , --這兩個算術運算符的, 這點和Java中不同.
整數相除的結果, 還是整數. 如果想獲取到小數, 則必須有浮點型數據參與.例如: 10 / 3 結果是3 10 / 3.0 結果是: 3.3333(無限循環)關於 號拼接字符串: 任意類型的數據和字符串拼接, 結果都將是一個新的字符串.關於%操作, 假設求a % b的值, 它的底層原理其實是: a - (a/b * b)
1.4 代碼演示需求: 演示算術運算符的常見操作.
參考代碼:
//演示 號操作println( 3)println(10 3)println("hello" 10)//演示-號操作println(-5)println(10 - 5)//演示*號操作println(5 * 3)//演示/號操作println(10 / 3)println(10 / 3.0)//演示%(取餘)操作println(10 % 3) //結果是1, 具體運算過程: 10 - 10/3 * 3 = 10 - 3 * 3 = 1println(10 % -3) //結果是1, 具體運算過程: 10 - 10/-3 * -3 = 10 - -3 * -3 = 10 - 9 = 1println(-10 % 3) //結果是-1, 具體運算過程: -10 - -10/3 * 3 = -10 - -3 * 3 = -10 9 = -1
2. 賦值運算符2.1 概述賦值運算符指的就是用來進行賦值操作的符號. 例如: 把一個常量值, 或者一個變量值甚至是某一段代碼的執行結果賦值給變量, 這些都要用到賦值運算符.
2.2 分類賦值運算符常用的有兩類基本賦值運算符=就是基本的賦值運算符, 例如: var a:Int = 3, 就是把常量值3賦值給變量a擴展賦值運算符 =, -=, *=, /=, %=注意:賦值運算符的左邊必須是: 變量, 不能是常量. 例如: 3 = 5, 這種寫法就是錯誤的. 關於擴展賦值運算符, 其實就是把左邊的數據和右邊的數據進行指定的操作, 然後把結果賦值給左邊.例如; a = 3 就是把變量a的值和常量3進行加法操作, 然後把結果賦值給變量a2.3 代碼演示//將常量值1賦值給變量avar a:Int = 1 //注意: 因為後續代碼要修改變量a的值, 所以變量a要用var修飾//對變量a進行加3操作, 然後把結果重新賦值給變量aa = 3 //a的最終結果為: a = 4//對變量a進行減2操作, 然後把結果重新賦值給變量aa -= 2 //a的最終結果為: a = 2//對變量a進行乘3操作, 然後把結果重新賦值給變量aa *= 3 //a的最終結果為: a = 6//對變量a進行除2操作, 然後把結果重新賦值給變量aa /= 2 //a的最終結果為: a = 3//對變量a和2進行取餘操作, 然後把結果重新賦值給變量aa %= 2 //a的最終結果為: a = 1
3. 關係運算符3.1 概述關係運算符指的就是用來進行比較操作的符號. 例如: 數據是否相等, 是否不等, 數據1大還是數據2大...等這些操作.
3.2 分類
運算符
功能解釋
>
用來判斷前邊的數據是否大於後邊的數據
>=
用來判斷前邊的數據是否大於或者等於後邊的數據
<
用來判斷前邊的數據是否小於後邊的數據
b) //false//判斷a是否大於等於b, 並列印結果println(a >= 3) //true//判斷a是否小於b, 並列印結果println(a < b) //true//判斷a是否小於等於b, 並列印結果println(a <= 3) //true//判斷a和b是否不等, 並列印結果println(a != b) //true//判斷a和b是否相等, 並列印結果println(a == b) //false//如果把==寫成了=, 其實是把變量b的值賦值給變量aprintln(a = b) //輸出結果是一對小括號"", 即: 沒有列印值.println(a) //再次列印變量a, 列印結果是:5
3.4 關係運算符延伸學過Java的同學會發現, 上述的Scala中的關係運算符用法和Java中是一樣的, 那有和Java不一樣的地方嗎?
答案是: 有.
需求描述
Scala代碼
Java代碼
比較數據值
== 或者 !=
equals方法
比較引用值(地址值)
eq方法
== 或者 !=
示例
有一個字符串"abc",再創建第二個字符串,值為:在第一個字符串後拼接一個空字符串。
然後使用比較這兩個字符串是否相等、再查看它們的引用值是否相等。
參考代碼
val s1 = "abc"val s2 = s1 ""s1 == s2 //結果是: true, 因為比較的是 數據值s1.eq(s2) //結果是: false, 因為比較的是 地址值
4. 邏輯運算符4.1 概述邏輯運算符指的就是用來進行邏輯操作的符號. 可以簡單理解為它是: 組合判斷. 例如: 判斷多個條件是否都滿足, 或者滿足其中的某一個, 甚至還可以對某個判斷結果進行取反操作.
4.2 分類
運算符
功能解釋
&&
邏輯與, 要求所有條件都滿足(即: 結果為true), 簡單記憶: 有false則整體為false.
||
邏輯或, 要求只要滿足任意一個條件即可, 簡單記憶: 有true則整體為true.
!
邏輯非, 用來進行取反操作的. 即: 以前為true, 取反後為false, 以前為false, 取反後為true.
注意:
邏輯表達式不管簡單還是複雜, 最終結果一定是Boolean類型的值, 要麼是true, 要麼是false.
在Scala代碼中, 不能對一個Boolean類型的數據進行連續取反操作, 但是在Java中是可以的. 即: !!false, 這樣寫會報錯, 不支持這種寫法.
4.3 代碼演示//相當於: false && trueprintln(3 > 5 && 2 < 3) //結果為: false//我們可以簡寫代碼為://邏輯與: 有false則整體為false.println(false && true) //結果為: falseprintln(true && false) //結果為: falseprintln(false && false) //結果為: falseprintln(true && true) //結果為: trueprintln(false || true) //結果為: trueprintln(true || false) //結果為: trueprintln(false || false) //結果為: falseprintln(true || true) //結果為: trueprintln(!false) //結果為: trueprintln(!true) //結果為: falseprintln(!!true) //這樣寫會報錯, Scala不支持這種寫法, 但是Java代碼支持這種寫法.
5. 位運算符5.1 鋪墊知識要想學好位運算符, 你必須得知道三個知識點:
什麼是進位什麼是8421碼整數的原碼, 反碼, 補碼計算規則5.1.1 關於進位通俗的講, 逢幾進一就是幾進位, 例如: 逢二進一就是二進位, 逢十進一就是十進位, 常用的進位有以下幾種:
進位名稱
數據組成規則
示例
二進位
數據以0b(大小寫均可)開頭, 由數字0和1組成
0b10001001, 0b00101010
八進位
數據以0開頭, 由數字0~7組成
064, 011
十進位
數據直接寫即可, 無特殊開頭, 由數字0~9組成
10, 20, 333
十六進位
數據以0x(大小寫均可)開頭, 由數字0~9, 字母A-F組成(大小寫均可)
0x123F, 0x66ABC
注意:
關於二進位的數據, 最前邊的那一位叫: 符號位, 0表示正數, 1表示負數. 其他位叫: 數值位.
例如: 0b10001001 結果就是一個: 負數, 0b00101010 結果就是一個: 正數.
5.1.2 關於8421碼8421碼就是用來描述二進位位和十進位數據之間的關係的, 它可以幫助我們快速的計算數據的二進位或十進位形式.
8421碼對應關係如下:
二進位位 0 0 0 0 0 0 0 0
對應的十進位數據: 128 64 32 16 8 4 2 1
注意:
計算規則: 二進位位從右往左數, 每多一位, 對應的十進位數據 乘以2.
二進位和十進位相互轉換的小技巧: 二進位轉十進位: 獲取該二進位位對應的十進位數據, 然後累加即可. 例如: 0b101對應的十進位數據計算步驟: 4 0 1 = 5十進位轉二進位: 對十進位數據進行拆解, 看哪些數字相加等於它, 然後標記成二進位即可.例如: 10 對應的二進位數據計算步驟: 10 = 8 2 = 0b1010
5.1.3 關於整數的原反補碼計算規則所謂的原反補碼, 其實指的都是二進位數據, 把十進位的數據轉成其對應的二進位數據, 該二進位數據即為: 原碼.
注意: 計算機底層存儲, 操作和運算數據, 都是採用數據的二進位補碼形式來實現的.
正數正數的原碼, 反碼, 補碼都一樣, 不需要特殊計算.負數負數的反碼計算規則: 原碼的符號位不變, 數值位按位取反(以前為0現在為1, 以前為1現在為0)負數的補碼計算規則: 反碼 15.2 概述位運算符指的就是按照位(Bit)來快速操作數據值, 它只針對於整型數據. 因為計算機底層存儲, 操作, 運算採用的都是數據的二進位補碼形式, 且以後我們要經常和海量的數據打交道, 為了提高計算效率, 我們就可以使用位運算符來實現快速修改數據值的操作.
5.3 分類
運算符
功能解釋
&
按位與, 規則: 有0則0, 都為1則為1.
|
按位或, 規則: 有1則1, 都為0則為0.
^
按位異或, 規則: 相同為0, 不同為1.
~
按位取反, 規則: 0變1, 1變0.
<<
按位左移, 規則: 每左移一位, 相當於該數據乘2, 例如: 2 <>
按位右移, 規則: 每右移一位, 相當於該數據除2, 例如: 6 >> 1, 結果為3
注意:
位運算符只針對於整型數據.
運算符操作的是數據的二進位補碼形式.
小技巧: 一個數字被同一個數字位異或兩次, 該數字值不變. 即: 10 ^ 20 ^ 20, 結果還是10
5.4 代碼演示//定義兩個變量a和b, 初始化值分別為: 3, 5val a = 3 //二進位數據: 0000 0011val b = 5 //二進位數據: 0000 0101//結果為: 0000 0001, 轉化成十進位, 結果為: 1println(a & b) //列印結果為: 1//結果為: 0000 0111, 轉化成十進位, 結果為: 7println(a | b) //列印結果為: 7//結果為: 0000 0110, 轉換成十進位, 結果為: 6println(a ^ b) //列印結果為: 6//計算流程: 1111 1100(補碼) -> 1111 1011(反碼) -> 1000 0100(原碼) -> 十進位數據: -4println(~ a) //列印結果為: -4//計算流程: 1000 0011(-3原碼) -> 1111 1100(-3反碼) -> 1111 1101(-3補碼) -> 0000 0010(取反後新補碼) -> 十進位數據: 2println(~ -3) //列印結果為: 2//計算流程: 0000 0011(3的補碼) -> 0000 1100(新的補碼) -> 十進位數據: 12println(a < 0000 0001(新的補碼) -> 十進位數據: 1println(a >> 1) //列印結果為: 1println(a ^ b ^ b) //列印結果為: 3
6. 案例: 交換兩個變量的值6.1 需求已知有兩個Int類型的變量a和b, 初始化值分別為10和20, 請寫代碼實現變量a和變量b的值的交換.
即最終結果為: a=20, b=10.
注意: 不允許直接寫a=20, b=10這種代碼.
6.2 參考代碼方式一: 通過算術運算符實現.//定義兩個Int類型的變量a和b, 初始化值分別為10和20var a = 10var b = 20//將變量a和b的計算結果賦值給變量aa = a b //a = 30, b = 20//計算並賦值b = a - b //a = 30, b = 10a = a - b //a = 20, b = 10//列印結果println("a: " a) //a: 20println("b: " b) //b: 10
方式二: 通過定義臨時變量實現//定義兩個Int類型的變量a和b, 初始化值分別為10和20var a = 10var b = 20//定義臨時變量temp, 記錄變量a的值var temp = a //a = 10, b = 20, temp = 10//把變量b的值賦值給aa = b //a = 20, b = 20, temp = 10//把臨時變量temp的值賦值給bb = temp //a = 20, b = 10, temp = 10//列印結果println("a: " a) //a: 20println("b: " b) //b: 10
方式三: 通過位運算符實現//定義兩個Int類型的變量a和b, 初始化值分別為10和20var a = 10var b = 20//定義臨時變量temp, 記錄變量a和b的位異或值(這個值不需要我們計算)var temp = a ^ b //即: temp = 10 ^ 20//通過位異或進行交換變量值 a = a ^ temp //運算流程: a = a ^ temp = a ^ a ^ b = 10 ^ 10 ^ 20 = 20b = b ^ temp //運算流程: b = b ^ temp = b ^ a ^ b = 20 ^ 10 ^ 20 = 10//列印結果println("a: " a) //a: 20println("b: " b) //b: 10
,