資料型別與運算子
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的子類
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/283206.html
標籤:其他
上一篇:Hive概述
