資料類型與操作符
scala中的類型以及操作符絕大多數和Java一樣,我們主要來學習
- 與Java不一樣的一些用法
- scala類型的繼承體系
資料類型
基礎類型 | 類型說明 |
---|---|
Byte | 8位帶符号整數 |
Short | 16位帶符号整數 |
Int | 32位帶符号整數 |
Long | 64位帶符号整數 |
Char | 16位無符号Unicode字元 |
String | Char類型的序列(字元串) |
Float | 32位單精度浮點數 |
Double | 64位雙精度浮點數 |
Boolean | true或false |
注意下 scala類型與Java的差別
[!NOTE]
scala中所有的類型都使用大寫字母開頭
整形使用Int而不是Integer
scala中定義變量可以不寫類型,讓scala編譯器自動推斷
運算符
類别 | 操作符 |
---|---|
算術運算符 | +、-、*、/、%(加減乘除和取模) |
關系運算符 | >、<、==、!=、>=、<= |
邏輯運算符 | &&、||、! |
位運算符 | &、||、^、<<、>> |
Scala 中的運算符, 基本上和Java一樣, 除了:
- scala中沒有,++、--運算符
- 與Java不一樣,在scala中,可以直接使用==、!=進行比較,它們與equals方法表示一緻。而比較兩個對象的引用值,使用eq
示例
有一個字元串"abc",再建立第二個字元串,值為:在第一個字元串後拼接一個空字元串。
然後使用比較這兩個字元串是否相等、再檢視它們的引用值是否相等。
參考代碼
val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)
複制
2.3.3 scala類型層次結構
所有的類型都是從Any繼承了, 也就是我們Scala是一種單根繼承體系
類型 | 說明 |
---|---|
Any | 所有類型的父類,,它有兩個子類AnyRef與AnyVal |
AnyVal | 所有數值類型的父類 |
AnyRef | 所有對象類型(引用類型)的父類 (String 本質就是Char數組, 也是引用類型哦) |
Unit | 表示空,Unit是AnyVal的子類,它隻有一個的執行個體{% em %}() {% endem %}<br />它類似于Java中的void,但scala要比Java更加面向對象, Unit 本身也是一個類哦, 當傳回值為空的時候,傳回的就是Unit, Unit的執行個體就是一個括号() |
Null | Null也就是AnyRef的子類,也就是說它是所有引用類型的子類。它的執行個體是{% em %}null{% endem %}<br />可以将null指派給任何引用對象類型 |
Nothing | 所有類型的子類<br />不能直接建立該類型執行個體,某個方法抛出異常時,傳回的就是Nothing類型,因為Nothing是所有類的子類,那麼它可以指派為任何類型 |
nothing
def main(args: Array[String]): Unit = {
val c = m3(1,0)
}
def m3(x:Int, y:Int):Int = {
if(y == 0) throw new Exception("這是一個異常")
x / y
}
複制
問題
以下代碼是否有問題?
val b:Int = null
scala會解釋報錯:
Null類型并不能轉換為Int類型,說明Null類型并不是Int類型的子類, 也就是不是數值類型AnyVal的子類