前文連接:html
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