Kotlin入門第三課:數據類型

 

前文連接:html

Kotlin入門第一課:從對比Java開始java

Kotlin入門第二課:集合操做數組

初次嘗試用Kotlin實現Android項目安全

 

Kotlin的數據類型與Java相似,所以這篇文章主要看Kotlin的幾點改變(改進)。app

 

1. 內置數據類型spa

Double--64位    Float--32位code

Long--64位        Int--32位orm

Short--16位       Byte--8位htm

Kotlin中字符型再也不是基礎類型,下面會進行介紹。對象

1.1 類型名稱

類型只有首字母大寫1種名稱,如32位整型爲Int,Java是int和Integer並存。

Kotlin只有一種形式:

1 var vInt: Int = 5

這樣的改變會讓開發者更加高效,不用多花精力在不一樣場景下切換使用的類型。

Java支持封箱和拆箱:

1 int vint = 5; 2 Integer vInt = vint; 3 vint = vInt;

Java中具體化泛型等狀況下是必需要用Integer類型的,通常的整型變量用int便可,Kotlin如今統一使用Int。

1.2 類型轉換

類型之間不能進行隱式轉換,Java是容許的。

Kotlin代碼第2-5行是編譯不過的:

1 var vInt: Int = 5
2 var vLong: Long = vInt 3 var vLong: Long = (Long) vInt 4 vInt = vLong 5 vInt = (Int) vLong

錯誤信息:The integer literal does not conform to the expected type Int

對Kotlin瞭解地越多,越會發現它的安全性,儘可能用顯示的代碼來實現明確的需求,不明確或隱式的部分越少越好。

Java代碼只有第4行不能編譯經過:

1 int vint = 5; 2 long vlong = vint; 3 vlong = (long) vint; 4 vint = vlong; 5 vint = (int) vlong;

Java中將類型從小到大進行隱式(或顯示)轉換屬於正常賦值操做,從大到小隻容許顯示轉換,但也可能會出現數據範圍溢出問題。

對於類型之間的顯示轉換,Kotlin提供瞭如下方法:

toDouble(): Double    toFloat(): Float

toLong(): Long           toInt(): Int

toShort(): Short          toByte(): Byte

toChar(): Char             toString(): String

後面2個方法涉及到字符和字串,也就是說這8種數據類型能夠相互轉換。

Kotlin中的變量都是做爲對象處理,因此連內置數據類型都有方法和屬性。

以Int和Long爲例,相互轉換的代碼:

1 var vInt: Int = 97
2 var vLong: Long = 98
3 vInt = vLong.toInt() 4 vLong = vInt.toLong()

注意不一樣類型各自的數值範圍不一樣,特別是Byte、Char及Short這種小範圍的數據類型。由於若是將數值從大類型轉換爲小類型時,可能會出現範圍溢出問題,可是並不會提示什麼錯誤信息,而是以"循環"的方式計算結果值,這固然是不正確的結果。

1 var vLong: Long = 128
2 var vByte: Byte = vLong.toByte()

Byte的長度和範圍分別是8位和-128~127,當類型Long的128轉爲Byte時,超過最大值127的部分爲1,因此繼續向後移一個值做爲結果,即-128。

還有就是String類型,當內容不是純數值時,轉換爲數值會報錯。

1 var vStr: String = "123asd"
2 var vInt: Int = vStr.toInt()

錯誤信息:Exception in thread "main" java.lang.NumberFormatException: For input string: "123asd"

 

2. 字符類型Char

Kotlin中Char類型(16位)不是基礎類型,主要體如今和整型的關係上,Java中字符型和整型是能夠隱式賦值和比較的,但Kotlin不行。

Java代碼,vBool獲得的值是true:

1 boolean vBool = 'a' == 97;

Kotlin代碼,不能編譯經過:

1 var vBool: Boolean = 'c' == 97

錯誤信息:Operator '==' cannot be applied to 'Char' and 'Int'

 

3. 布爾類型Boolean

可取值true或false,內置有&&、||及!三種邏輯操做,還有一個toString()方法。

 

4. 數組類型Arrays

Kotlin數組的定義方式更加簡潔,下面代碼定義了Int和String兩個類型的數組。

1 val intArray: IntArray = intArrayOf(1, 2, 3) 2 val strArray = Array(5, { i -> (i * i).toString() })

經過索引方式([index])訪問數組元素,如intArray[0]的值爲1。

 

5. 字串類型String

Kotlin字串類型的定義和用法和Java相似,賦值的內容也是不能改變的。

1 var vStr: String = "123asd"

可是字符的獲取除了get()方法,還能夠直接用索引方式([index]),如vStr[3]的值爲字符'a'。

另外,還能夠經過foreach的形式來遍歷字串,而Java是不能經過foereah遍歷String類型變量的。

1 val vStr: String = "123asd"
2 for (c in vStr) {
3     println(c)
4 }

代碼將字串中的字符挨個輸出,結果爲:

1
2
3
a
s
d
相關文章
相關標籤/搜索