1.Scala 數據類型
Scala 與 Java有着相同的數據類型,下表列出了 Scala 支持的數據類型
數據類型 | 描述 |
---|---|
Byte | 8位有符號補碼整數。數值區間爲 -128 到 127 |
Short | 16位有符號補碼整數。數值區間爲 -32768 到 32767 |
Int | 32位有符號補碼整數。數值區間爲 -2147483648 到 2147483647 |
Long | 64位有符號補碼整數。數值區間爲 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754標準的單精度浮點數 |
Double | 32 位 IEEE 754標準的單精度浮點數 |
Char | 16位無符號Unicode字符, 區間值爲 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示無值,和其他語言中void等同。用作不返回任何結果的方法的結果類型。Unit只有一個實例值,寫成()。 |
Null | null 或空引用 |
Nothing | Nothing類型在Scala的類層級的最低端;它是任何其他類型的子類型。 |
Any | Any是所有其他類的超類 |
AnyRef | AnyRef類是Scala裏所有引用類(reference class)的基類 |
Scala的基本數據類型與Java中的基本數據類型是一一對應的,不同的是Scala的基本數據類型頭字母必須大寫,下面我們以Int、Long、String、Char、Double及Float類型爲例介紹Scala的變量定義及數據類型
- 整數類型
scala> val intNumber = 10
intNumber: Int = 10
- 浮點類型
// Double類型定義,直接輸入浮點數,編譯器會將其自動推斷爲Double類型
scala> val doubleNumber = 3.1415
doubleNumber: Double = 3.1415
scala> val floatNumber = 3.14
floatNumber: Double = 3.14
// 要定義Float類型浮點數,需要在浮點數後面加F或f
scala> val floatNumber = 3.14F
floatNumber: Float = 3.14
scala> val floatNumber = 3.14f
floatNumber: Float = 3.14
- 字符
// 字符定義,用''將字符包裹
scala> val charType = 'A'
charType: Char = A
常用特殊字符
特殊字符 | 描述 |
---|---|
\n | 換行符,其Unicode編碼爲 (\u000A) |
\b | 回退符,其Unicode編碼爲 (\u0008) |
\t | tab製表符 ,其Unicode編碼(\u0009) |
\” | 雙引號,其Unicode編碼爲 (\u0022) |
\’ | 單引號,其Unicode編碼爲 (\u0027) |
\ | 反斜杆,其Unicode編碼爲(\u005C) |
- 字符串
// 字符串變量用""包裹
scala> val helloworld = "hello world"
helloworld: String = hello world
// 要定義"Hello World",可以加入轉義符\
scala> val helloworld = "\"Hello World\""
helloworld: String = "Hello World"
//如果希望能夠原樣輸出字符串中的內容,則用三個引號"""將字符串包裹起來
scala> println("""hello world \n hello scala""")
hello world \n hello scala
- 布爾類型
scala> val flag = true
flag: Boolean = true
- 變量定義的兩種修飾符
scala中變量定義有兩種修飾符,一種val,一種是var,兩者區別是val修飾的變量不可變,var修改的變量可變,可再次賦值,以上面定義的helloworld爲例
// val 修飾的變量不可再次賦值,否則會報錯 reassignment to val
scala> val hello = "hello"
hello: String = hello
scala> hello = "hello scala"
<console>:12: error: reassignment to val
hello = "hello scala"
^
scala> var hello = "hello"
hello: String = hello
scala> hello = "hello scala"
hello: String = hello scala
2.運算符
2.1 算術操作
運算符 | 描述 |
---|---|
+ | 加號 |
- | 減號 |
* | 乘號 |
/ | 除號 |
% | 取餘 |
實例:
// 整數求和,編譯器會將其轉換爲(1).+(2)執行
scala> var sum = 1 + 2
sum: Int = 3
//前一語句等同於下列語句
scala> var sum = (1).+(2)
sum: Int = 3
//操作符重載,編譯器會將其轉換爲(1).+(2L)執行
scala> var longSum = 1 + 2L
longSum: Long = 3
// 減法
scala> var jian = 1-5
jian: Int = -4
// 除法
scala> val chu = 1/5
chu: Int = 0
// 取模
scala> val mo = 1%5
mo: Int = 1
// 乘法
scala> val cheng = 1L * 5L
cheng: Long = 5
// scala中可以用+ -符號來表示正負數,例如-3 +3,並且可以加入到運算符當中
scala> val num = 1 + -5
num: Int = -4
2.2 關係運算
運算符 | 描述 |
---|---|
== | 等於 |
!= | 不等於 |
> | 大於 |
< | 小於 |
>= | 大於等於 |
<= | 小於等於 |
實例:
scala> 5 > 1
res1: Boolean = true
scala> 5 < 1
res2: Boolean = false
scala> 5 <= -1
res3: Boolean = false
scala> 5 <= 10
res4: Boolean = true
// "!" 表示求反
scala> !(5 <= -5)
res5: Boolean = true
scala> 5 != -5
res6: Boolean = true
scala> 5 == 5
res7: Boolean = true
2.3 邏輯運算
運算符 | 描述 |
---|---|
&& | 邏輯與 |
|| | 邏輯或 |
! | 邏輯非 |
實例:
scala> val a = true
a: Boolean = true
scala> val b = false
b: Boolean = false
scala> a && b
res8: Boolean = false
scala> a || b
res9: Boolean = true
scala> !(a || b)
res10: Boolean = false
scala> a && !b
res11: Boolean = true
2.4 賦值運算符
運算符 | 描述 | 實例 |
---|---|---|
= | 簡單的賦值運算,指定右邊操作數賦值給左邊的操作數 | 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 相當於 C = C % A |
實例:
object Test {
def main(args: Array[String]): Unit = {
var a = 2;
var b = 5;
var c = 0;
c += b
println("c += b = " + c) // c += b = 5
c -= a
println("c -= a = " + c) // c -= a = 3
c *= 5
println("c *= 5 = " + c) // c *= 5 = 15
c /= b
println("c /= a = " + c) // c /= a = 3
c %= a
println("c %= a = " + c) // c %= a = 1
}
}
3. 流程控制
- if使用
scala> val num = if("hello"=="hello") 1 else 0
num: Int = 1
- while使用
scala> var a = 1
a: Int = 1
scala> while(a <= 10) {
| println("a = " + a)
| a += 1
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
- do while 使用
scala> do{
| println("a = " + a)
| a += 1
| } while(a <= 10)
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
- for使用
// 1 to 10 表示1到10
scala> for(a <- 1 to 10){
| println("a = " + a)
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
// 1 until 10 表示1到10但不包括10
scala> for(a <- 1 until 10){
| println("a = " + a)
| }
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
// 在 for 循環 中你可以使用分號 (;) 來設置多個區間,它將迭代給定區間所有的可能值
scala> for(a <- 1 to 3; b <- 1 to 3){
| println("a = " + a)
| println("b = " + b)
| }
a = 1
b = 1
a = 1
b = 2
a = 1
b = 3
a = 2
b = 1
a = 2
b = 2
a = 2
b = 3
a = 3
b = 1
a = 3
b = 2
a = 3
b = 3
// 可以將 for 循環的返回值作爲一個變量存儲。語法格式如下:
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
// 大括號中用於保存變量和條件,retVal 是變量,循環中的 yield 會把當前的元素記下來,保存在集合中,循環結束後將返回該集合
實例:
scala> var a = 0
a: Int = 0
scala> val numList = List(1,2,3,4,5,6,7,8,9,10)
numList: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> var retVal = for{ a<- numList if a != 3; if a < 8 } yield a
retVal: List[Int] = List(1, 2, 4, 5, 6, 7)
scala> for(a <- retVal){
| println("a = " + a)
| }
a = 1
a = 2
a = 4
a = 5
a = 6
a = 7