天天看點

2021年大資料常用語言Scala(六):基礎文法學習 資料類型與操作符資料類型與操作符

資料類型與操作符

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
2021年大資料常用語言Scala(六):基礎文法學習 資料類型與操作符資料類型與操作符

示例

有一個字元串"abc",再建立第二個字元串,值為:在第一個字元串後拼接一個空字元串。

然後使用比較這兩個字元串是否相等、再檢視它們的引用值是否相等。

參考代碼

val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)           

複制

2.3.3 scala類型層次結構

2021年大資料常用語言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的子類