像我們在前面部分展示的,當你建立乙個變數時可以明確的把它的型別標出來:
val count: int =
1val name: string =
"alvin"
然而,通常你會去掉型別,scala會為你推斷出型別:
val count =
1val name =
"alvin"
當你去掉型別時,大多數情況下你的**會更容易讀,所以,這種推斷的方式是更受歡迎的。
例如,在下面這個例子中,很明顯它的型別是person,因此這就沒有必要在表示式的左邊再宣告它的型別:
val p =
newperson
("candy"
)
相反,如果你在變數名的後面加上型別,**就會讓人感到沒有必要的冗長:
val p: person =
newperson
("leo"
)
總而言之:
val p =
newperson
("candy"
)// preferred
val p: person =
newperson
("candy"
)// unnecessarily verbose
當你需要明確的說清楚時,使用明確標註型別的形式
當你想清楚的知道你建立的型別時,你會想要去顯示出資料的型別。也就是說,當你沒有明確的宣告資料的型別時,編譯器也許會對你想建立的型別做出錯誤的推斷。關於這的一些例子就是當你想要去建立特定型別的數值資料時,在下面我們會展示。
scala具有你期待的標準數值資料型別。在scala中,全部這些資料型別都是完整的物件(不是原始資料型別)。
下面這些例子展示了如何宣告基本數值型別的變數:
val b: byte =
1val x: int =
1val l: long =
1val s: short =
1val d: double =
2.0val f: float =
3.0
在前四個例子中,如果你不明確的宣告型別,數字1預設是int型別的。所以,如果你想要其他的資料型別 ----byte,long,short,你需要像上面展示的那樣宣告這些型別。
帶有小數點的數值(像 2.0)會預設為double, 如果你想要宣告乙個float型別的數值,你需要像上面最後乙個例子那樣明確的宣告。
因為int和double是預設的數值型別,通常你建立它們時就不用明確的標註型別了:
val i =
123// defaults to int
val x =
1.0// defaults to double
可以在repl中看到,這些例子會預設為int或double:
scala> val i = 123
i: int = 123
scala> val x = 1.0
x: double = 1.0
資料型別和它的數值範圍:
資料型別
可能取值
boolean
true 或 false
byte
8位有符號二進位制補碼整數(-2^7 ~ 2^7-1,包含邊界值)-128 ~ 127
short
16位有符號二進位制補碼整數(-2^15 ~ 2^15-1,包含邊界值)-32,768 ~ 32767
int32位有符號二進位制補碼整數(-2^31 ~ 2^31-1,包含邊界值) -2,147,483,648 ~ 2,147,483,647
long
64位有符號二進位制補碼整數(-2^63 ~ 2^63-1,包含邊界值)
float
32位 ieee 754 單精度浮點 1.40129846432481707e-45 ~ 3.40282346638528860e+38
double
64位 ieee 754 雙精度浮點 4.94065645841246544e-324d to 1.79769313486231570e+308d
char
16位無符號unicode字元 (0 ~ 2^16-1, 包含邊界值)
string
一連串的char
針對很大的數,scala 也包含了bigint和bigdecimal型別:
var b =
bigint
(1234567890
)var b =
bigdecimal
(123456.789
)
一件很棒事,就是bigint和bigdecimal都支援數值型別一般會用到的所有運算子:
scala> var b = bigint(1234567890)
b: scala.math.bigint = 1234567890
scala> b + b
res0: scala.math.bigint = 2469135780
scala> b * b
res1: scala.math.bigint = 1524157875019052100
scala> b += 1
scala> println(b)
1234567891
scala也有string和char型別,一般你在宣告時不會標註型別:
val name =
"bill"
val c =
'a'
val name: string =
"bill"
val c: char =
'a'
像上面展示的,用雙引號(「 」)圍住string型別的值,用單引號(』 ')圍住char型別的值。 Python關於型別的一些內建函式
str 返回標準型別 type 返回任意型別 isinstance object,classinfo 如果引數object是classinfo的例項,或者object是classinfo類的子類的乙個例項,返回true。如果object不是乙個給定型別的的物件,則返回結果總是false。如果clas...
一些型別的sizeof
includeclass a class b class c class d d static void testsizeof std cout bool sizeof sizeof bool 結果 bool sizeof 1 char sizeof 1 int sizeof 4 char data...
C char 型別的一些解釋
說明為方便敘述和理解,本文犧牲部分嚴謹性 本文中的概念 數字 代表整數等日常意義上的數而並非書寫符號 c 中用char型別儲存標準ascii標準字元。char型別占用乙個位元組,可以有128個取值,每個取值代表乙個字元,對應規則由 ascii字符集 規定。比如,char中取值48代表著字元 0 ch...