Scala 擁有下表所示的數據類型,其中 Byte、Short、Int、Long 和 Char 類型統稱爲整數類型,整數類型加上 Float 和 Double 統稱爲數值類型。Scala 數值類型的取值範圍和 Java 對應類型的取值範圍相同。java
數據類型 | 描述 |
---|---|
Byte | 8 位有符號補碼整數。數值區間爲 -128 到 127 |
Short | 16 位有符號補碼整數。數值區間爲 -32768 到 32767 |
Int | 32 位有符號補碼整數。數值區間爲 -2147483648 到 2147483647 |
Long | 64 位有符號補碼整數。數值區間爲 -9223372036854775808 到 9223372036854775807 |
Float | 32 位, IEEE 754 標準的單精度浮點數 |
Double | 64 位 IEEE 754 標準的雙精度浮點數 |
Char | 16 位無符號 Unicode 字符, 區間值爲 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true 或 false |
Unit | 表示無值,等同於 Java 中的 void。用做不返回任何結果的方法的結果類型。Unit 只有一個實例值,寫成 ()。 |
Null | null 或空引用 |
Nothing | Nothing 類型在 Scala 的類層級的最低端;它是任何其餘類型的子類型。 |
Any | Any 是全部其餘類的超類 |
AnyRef | AnyRef 類是 Scala 裏全部引用類 (reference class) 的基類 |
Scala 的變量分爲兩種,val 和 var,其區別以下:git
scala> val a=1 a: Int = 1 scala> a=2 <console>:8: error: reassignment to val // 不容許從新賦值 scala> var b=1 b: Int = 1 scala> b=2 b: Int = 2
在上面的演示中,並無聲明 a 是 Int 類型,可是程序仍是把 a 當作 Int 類型,這就是 Scala 的類型推斷。在大多數狀況下,你都無需指明變量的類型,程序會自動進行推斷。若是你想顯式的聲明類型,能夠在變量後面指定,以下:es6
scala> val c:String="hello scala" c: String = hello scala
在 scala 命令行中,若是沒有對輸入的值指定賦值的變量,則輸入的值默認會賦值給 resX
(其中 X 是一個從 0 開始遞增的整數),res
是 result 的縮寫,這個變量能夠在後面的語句中進行引用。github
scala> 5 res0: Int = 5 scala> res0*6 res1: Int = 30 scala> println(res1) 30
Scala 和 Java 字面量在使用上不少類似,好比都使用 F 或 f 表示浮點型,都使用 L 或 l 表示 Long 類型。下文主要介紹二者差別部分。編程
scala> 1.2 res0: Double = 1.2 scala> 1.2f res1: Float = 1.2 scala> 1.4F res2: Float = 1.4 scala> 1 res3: Int = 1 scala> 1l res4: Long = 1 scala> 1L res5: Long = 1
Scala 支持 10 進制和 16 進制,但不支持八進制字面量和以 0 開頭的整數字面量。大數據
scala> 012 <console>:1: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)
字符字面量由一對單引號和中間的任意 Unicode 字符組成。你能夠顯式的給出原字符、也可使用字符的 Unicode 碼來表示,還能夠包含特殊的轉義字符。es5
scala> '\u0041' res0: Char = A scala> 'a' res1: Char = a scala> '\n' res2: Char =
字符串字面量由雙引號包起來的字符組成。命令行
scala> "hello world" res3: String = hello world
Scala 提供了 """ ... """
語法,經過三個雙引號來表示原生字符串和多行字符串,使用該種方式,原生字符串中的特殊字符不會被轉義。scala
scala> "hello \tool" res4: String = hello ool scala> """hello \tool""" res5: String = hello \tool scala> """hello | world""" res6: String = hello world
符號字面量寫法爲: '標識符
,這裏 標識符能夠是任何字母或數字的組合。符號字面量會被映射成 scala.Symbol
的實例,如:符號字面量 'x
會被編譯器翻譯爲 scala.Symbol("x")
。符號字面量可選方法不多,只能經過 .name
獲取其名稱。翻譯
注意:具備相同 name
的符號字面量必定指向同一個 Symbol 對象,不一樣 name
的符號字面量必定指向不一樣的 Symbol 對象。
scala> val sym = 'ID008 sym: Symbol = 'ID008 scala> sym.name res12: String = ID008
Scala 支持插值表達式。
scala> val name="xiaoming" name: String = xiaoming scala> println(s"My name is $name,I'm ${2*9}.") My name is xiaoming,I'm 18.
Scala 和其餘語言同樣,支持大多數的操做運算符:
以上操做符的基本使用與 Java 相似,下文主要介紹差別部分和注意事項。
Scala 的面向對象比 Java 更加純粹,在 Scala 中一切都是對象。因此對於 1+2
,其實是調用了 Int 類中名爲 +
的方法,因此 1+2,也能夠寫成 1.+(2)
。
scala> 1+2 res14: Int = 3 scala> 1.+(2) res15: Int = 3
Int 類中包含了多個重載的 +
方法,用於分別接收不一樣類型的參數。
和其餘語言同樣,在 Scala 中 &&
,||
的執行是短路的,即若是左邊的表達式能肯定整個結果,右邊的表達式就不會被執行,這知足大多數使用場景。可是若是你須要在不管什麼狀況下,都執行右邊的表達式,則可使用 &
或 |
代替。
在 Scala 中沒有 Java 中的 ++
和 --
運算符,若是你想要實現相似的操做,只能使用 +=1
,或者 -=1
。
scala> var a=1 a: Int = 1 scala> a+=1 scala> a res8: Int = 2 scala> a-=1 scala> a res10: Int = 1
操做符的優先級以下:優先級由上至下,逐級遞減。
在表格中某個字符的優先級越高,那麼以這個字符打頭的方法就擁有更高的優先級。如 +
的優先級大於 <
,也就意味則 +
的優先級大於以 <
開頭的 <<
,因此 2<<2+2
, 實際上等價於 2<<(2+2)
:
scala> 2<<2+2 res0: Int = 32 scala> 2<<(2+2) res1: Int = 32
若是想要判斷兩個對象是否相等,可使用 ==
和 !=
,這兩個操做符能夠用於全部的對象,包括 null。
scala> 1==2 res2: Boolean = false scala> List(1,2,3)==List(1,2,3) res3: Boolean = true scala> 1==1.0 res4: Boolean = true scala> List(1,2,3)==null res5: Boolean = false scala> null==null res6: Boolean = true
更多大數據系列文章能夠參見 GitHub 開源項目: 大數據入門指南