========================
類型說明,與java一致
值類型 範圍
Byte 8位有符號補碼整數(-27~27-1)
Short 16位有符號補碼整數(-215~215-1)
Int 32位有符號補碼整數(-231~231-1)
Long 64位有符號補碼整數(-263~263-1)
Char 16位無符號Unicode字符(0~216-1)
String 字符序列
Float 32位IEEE754單精度浮點數
Double 64位IEEE754單精度浮點數
Boolean true或false
特殊字符:
文本 含義
\n 換行(\u000A)
\b 回退(\u0008)
\t 製表符(\u0009)
\f 換頁(\u000C)
\r 回車(\u000D)
\" 雙引號(\u0022)
\' 單引號(\u0027)
\\ 反斜槓(\u005C)
=======================================
符號文本
符號文本被寫成'<標識符>,這裏<標識符>可以是任何字母或數字的標識符。
如: var a = 'cymbal
============================================
操作符和方法
任何方法都可以是操作符
與中綴操作符操作符帶後兩個操作數,一個在左一個在右相反,前綴和後綴操作符都是一元:unary的:它們僅帶一個操作數
可以當作前綴操作符用的標識符只有+,-,!和~
後綴操作符是不用點或括號調用的不帶任何參數的方法
Scala裏,你可以捨棄方法調用的空括號。例外就是如果方法帶有副作用就加上括號,如println(),不過如果方法沒有副作用就可以去掉括號,如String上調用的toLowerCase:
================================
數學運算
你可以通過中綴操作符,加號(+),減號(-),乘號(*),除號(/)和餘數(%),在任何數類型上調用數學方法 , scala中的基礎運算與java一致
scala> 1.2 + 2.3
res6: Double = 3.5
scala> 3 - 1
res7: Int = 2
scala> 'b' - 'a'
res8: Int = 1
scala> 2L * 3L
res9: Long = 6
scala> 11 / 4
res10: Int = 2
scala> 11 % 4
res11: Int = 3
scala> 11.0f / 4.0f
res12: Float = 2.75
scala> 11.0 % 4.0
res13: Double = 3.0
========================================
關係和邏輯操作
你可以用關係方法:大於(>),小於(<),大於等於(>=)和小於等於(<=)比較數類型,像等號操作符那樣,產生一個Boolean結果。另外,你可以使用一元操作符!(unary_!方法)改變Boolean值
scala> 1 > 2
res16: Boolean = false
scala> 1 < 2
res17: Boolean = true
scala> 1.0 <= 1.0
res18: Boolean = true
scala> 3.5f >= 3.6f
res19: Boolean = false
scala> 'a' >= 'A'
res20: Boolean = true
scala> val thisIsBoring = !true
thisIsBoring: Boolean = false
scala> !thisIsBoring
res21: Boolean = true
scala> val toBe = true
toBe: Boolean = true
scala> val question = toBe || !toBe
question: Boolean = true
scala> val paradox = toBe && !toBe
paradox: Boolean = false
===================================
對象相等性
scala> List(1, 2, 3) == List(1, 2, 3)
res27: Boolean = true
scala> List(1, 2, 3) == List(4, 5, 6)
res28: Boolean = false
scala> List(1, 2, 3) == null
res31: Boolean = false
scala> null == List(1, 2, 3)
res32: Boolean = false
===== ===== ====
scala> ("he" + "llo") == "hello"
res33: Boolean = true
=== 比較2個不同的對象
scala> 1 == 1.0
res29: Boolean = true
基本類型只能用==,!=, >,< 進行比較, 但是引用類型是用eq,ne,== , !=進行比較:
Scala的==與Java的有何差別 Java裏的既可以比較原始類型也可以比較參考類型。對於原始類型,Java的==比較值的相等性,如Scala。然而對於參考類型,Java的==比較了參考相等性:reference equality,也就是說這兩個變量是否都指向於JVM堆裏的同一個對象。Scala也提供了這種機制,名字是eq。不過,eq和它的反義詞,ne,僅僅應用於可以直接映射到Java的對象。
========================================
scala中的優先級和關聯性。
(所有其他的特殊字符)
* / %
+ -
:
= !
< >
&
^
|
======================================
富包裝器
8 到目前爲止,你應該能指出給出的這段代碼,Scala編譯器會調用成(bills.!*&^%~(code)).!()。
表格5.4 一些富操作
代碼 結果
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 Range(4, 5, 6)
"bob" capitalize "Bob"
"robert" drop 2 "bert"
富包裝類
基本類型 富包裝
Byte scala.runtime.RichByte
Short scala.runtime.RichShort
Int scala.runtime.RichInt
Long scala.runtime.RichLong
Char scala.runtime.RichChar
String scala.runtime.RichString
Float scala.runtime.RichFloat
Double scala.runtime.RichDouble
Boolean scala.runtime.RichBoolean