Scala學習筆記三

第五章 基本類型和操作

5.1 基本類型

一些基本類型

注意:在scala中基本類型小寫或者大寫都是一個意思,例如int和Int,最後都轉化爲Scala.Int。後續可能不支持小寫,推薦使用大寫開頭。Scala編譯器能直接把Scala值類型在它產生的字節碼裏轉義成Java的原始類型。

5.3 操作符與方法

  前面提到過,1 + 2與(1).+(2)其實是一回事。換句話說,就是Int類包含了叫做+的方法,它帶一個Int參數並返回一個Int結果。另外,Int包含了許多帶不同的參數類型的重載:overload的+方法。例如,Int還有另一個也叫+的方法參數和返回類型爲Long。如果你把Long加到Int上,這個替換的+方法就將被調用。
  操作符標註不僅限於像+這種其他語言裏看上去像操作符一樣的東西,其實任何方法都當作操作符來標註。查看如下代碼:

scala> val s = "Hello, world!" 
s: java.lang.String = Hello, world!    
scala> s indexOf 'o' // Scala調用了s.indexOf(’o’) 
res0: Int = 4
scala> s indexOf ('o', 5) // Scala調用了s.indexOf(’o’, 5) 
res1: Int = 7

  除了中綴操作符還有前綴(如“+”,“-”,“!”,“~”)和後綴操作符(如“toLong”)。前綴實際上調用了“unary_”。例如-2.0實際上調用了”(2.0).unary_-“。
  後綴操作符是不用點或括號調用的不帶任何參數的方法。Scala裏,你可以捨棄方法調用的空括號。例外就是如果方法帶有副作用就加上括號,如println(),不過如果方法沒有副作用就可以去掉括號,如String上調用的toLowerCase。
  所謂”副作用”(side effect),指的是函數內部與外部互動(最典型的情況,就是修改全局變量的值),產生運算以外的其他結果。

5.7 對象對等性

  scala中的“==”除了可以作用於基本類型,也可以作用於所有對象。“==”兩端的可以是相同類型,也可以是不同類型,甚至可以比較null或者任何可能爲null的東西,而不會拋出異常。
  scala中的“==”比較過程是:先判斷左邊是否爲null,如果不是則調用equals方法。equals方法的精度取決於“==”左邊的參數。Scala中不同類型判斷“==”可能會得到true的結果。比如“1.0 == 1”的結果爲true;“(“he”+”llo”)==”hello”結果爲true。因爲在有些類型裏重寫了equals方法,使得比較的是它們的內容而不是引用的對象。

5.8 操作符的優先級和關聯性

操作符優先級

  Scala基於操作符格式裏方法的第一個字符決定優先級。但有一個例外:如果操作符以等號字符(=)結束,且操作符並非比較操作符<=,>=,==,或=,那麼這個操作符的優先級與賦值符(=)相同。也就是說,它比任何其他操作符的優先級都低(如:“*=”,“+=”)

5.9 富包裝器

scala中每個基本類型都有一個富包裝器,如下所示。富包裝器中提供了更豐富的方法。調用這些方法可以通過隱式轉換實現。
富包裝類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章