1. 程式人生 > >Kotlin入門第三課:數據類型

Kotlin入門第三課:數據類型

索引 第三課 logs clas ble 基礎 dex 問題 soft

前文鏈接:

Kotlin學習第一課:從對比Java開始

Kotlin入門第二課:集合操作

初次嘗試用Kotlin實現Android項目

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

1、內置數據類型

Double--64位 Float--32位

Long--64位 Int--32位

Short--16位 Byte--8位

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

Kotlin入門第三課:數據類型