是否標明型別和一些內建的型別

2021-10-23 02:07:54 字數 3349 閱讀 9676

像我們在前面部分展示的,當你建立乙個變數時可以明確的把它的型別標出來:

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型別的數值,你需要像上面最後乙個例子那樣明確的宣告。

因為intdouble是預設的數值型別,通常你建立它們時就不用明確的標註型別了:

val i =

123// defaults to int

val x =

1.0// defaults to double

可以在repl中看到,這些例子會預設為intdouble:

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 也包含了bigintbigdecimal型別:

var b =

bigint

(1234567890

)var b =

bigdecimal

(123456.789

)

一件很棒事,就是bigintbigdecimal都支援數值型別一般會用到的所有運算子:

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也有stringchar型別,一般你在宣告時不會標註型別:

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...