Programming In Scala筆記-第五章、Scala中的變量類型和操作

  這一章的一些基礎性的東西,主要包括Scala中的基本變量類型,以及相關的一些操作符。
  

一、簡單類型

  下表中列出Scala語言中的基本類型,以及其字節長度,其中Byte, Short, Int, Long以及Char都屬於整型,整型再加上Float和Doble統稱爲數字類型。

類型 描述
Byte 8位有符號補碼整型(-2^7~2^7 - 1)
Short 16位有符號補碼整型(-2^15~2^15 - 1)
Int 32位有符號補碼 整型(-2^31~2^31 - 1)
Long 64位有符號補碼 整型(-2^63~2^63 - 1)
Char 16位無符號Unicode字符(0~2^16 - 1)
String 由一系列Char組成
Floar 32位雙精度浮點型
Double 64位雙精度浮點型
Boolean true或false

二、操作和方法

  Scala中的+, -, *, /實質上都是方法的調用,前面提到過1 + 2實際上是(1).+(2)的簡單形式,在這裏Int型變量有一個名稱爲+的方法,這個方法接收一個Int型參數,返回值也爲Int類型。Int型變量的+方法也可以接收一個Long型變量,返回結果爲Long型。這裏可以理解成有多個重載的+方法。

val sum = 1 + 2
val sumMore = (1).+(2)
val longSum = 1 + 2L

  運算結果如下:
  這裏寫圖片描述

  對於String類型的變量,可以直接調用其indexOf方法返回指定字符在字符串中出現第一次的下標位置。
  這裏寫圖片描述
同樣的String也提供了另外一個重載的indexOf方法,這個方法可以接收兩個參數,返回從指定位開始第一個指定字符的下標

s indexOf('o', 5)

  這裏寫圖片描述

  從這裏可以看出,不管是+操作,還是indexOf操作,在Scala中本質是相同的,同樣都是對某個對象的方法調用。

三、對象的equal判斷

  對Java熟悉的同學應該比較清楚==equals的區別。在Scala中判斷兩個對象是否相等可以直接使用==方法。
1、字面量之間
  首先看一下對字面量使用==方法的結果,和Java中是一樣的
  這裏寫圖片描述

2、對象之間
  再看一下兩個對象之間直接使用==方法的結果,
  這裏寫圖片描述

3、不同類型對象之間
  ==方法也可用於不同類型的對象之間,並且可以與null進行比較
  這裏寫圖片描述

  從上面這些操作可以看到,除了字面量的比較之外,Scala中==和Java中是不相同的。Java中,引用類型的==判斷僅僅比較兩個引用值是否指向內存堆中的同一個對象。而在Scala中對兩個引用的==比較,和Java中的equals方法效果是相同的。同時,在Scala中提供了一個eq方法用於判斷兩個引用值是否指向同一個對象。neeq的功能相反。
  這裏寫圖片描述

  Scala中調用==方法,程序執行時,首先判斷左邊的變量是否爲null,如果不爲null則調用其equals方法,判斷右邊變量是否相等。

四、富封裝
  Scala通過富封裝爲基本類型變量提供了更多的操作符,比如說對Int類型,有一個對應的富封裝類爲RichInt類型。基本變量的更多操作,以及基本變量的富封裝類對應關係分別列舉在下面的兩個表格中。
富封裝提供的操作表:

操作 結果
0 max 5 5
0 min 5 0
-2.7 abs 2.7
-2.7 round -3L
1.5 isInfinity false
(1.0 / 0) isInfinity true
4 to 6 4, 5, 6
“bob” capitalize “Bob”
“robert” drop 2 “bert”

富封裝類對應關係表:

基本類型 富封裝類型
Byte scala.runtime.RichByte
Short scala.runtime.RichShort
Int scala.runtime.RichInt
Char scala.runtime.RichChar
Float scala.runtime.RichFloat
Double scala.runtime.RichDouble
Boolean scala.runtime.RichBoolean
String scala.collection.immutable.StringOps
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章