Kotlin 基礎 - 數據類型
Boolean 值有兩個值,分別為 true 或 false。多數情況下,Kotlin 中的 Boolean 相當於 Java 中的基本類型 boolean,只有在必要的情況下才會裝箱成為 Java 中的裝箱類型 Boolean。這一切都是交由編譯器來完成,我們無需關心。
var isFirst: Boolean = true
var isSecond: Boolean = false
二、Number 類型
var aLong: Long = 123L var aInt: Int = 1234567890 var aShort: Short = 12345 var aFloat: Float = 23F var aDouble: Double = 23.0 var aByte: Byte = 127
基本類型的裝箱與拆箱
Kotlin 不再區分裝箱與非裝箱類型,在需要的時候編譯器會幫我們自動的選擇是使用基本類型還是裝箱類型。
三、Chat 類型
Chat 類型表示一個字符,一個字符可以是一個字,或者一個符號等等。
字符占兩個字節,表示一個 16 位的 Unicode 字符。
字符使用單引號 ‘‘ 引起來,例如 ‘中‘,‘A‘,‘\n‘。
四、數值類型的顯式轉換
在 Java 裏面,將一個 int 值賦給 long 值,是可以允許的,因為 Int 的範圍比 long 要小,所以 long 可以兼容 int。但是,在 Kotlin 中這樣的隱式轉換是不被支持的
var aInt: Int = 10 var aLong: Long = 10000 // 編譯器會報錯 aLong = aInt // 必須調用 toXXX 方法顯示轉換 aLong = aInt.toLong()
每個數值類型都支持下面的轉換
-
- toLong:Long
-
- toInt:Int
-
- toShort:Short
-
- toFloat:Float
-
- toDouble:Double
-
- toByte:BytetoChar: Char
-
- toString: String
五、字符串類型
字符串本質上可以說是"一串" Char,字符串使用雙引號 "" 引起來5.1 字符串的比較
var aName: String = "fancyluo" var bName: String = "fancyluo" println(aName == bName) // true println(aName === bName)// false
熟悉 Java 的同學對以上結果是不是就困惑了,怎麽 == 打印出來了 true,這裏我們可以看看== 的源碼就可以解開疑惑了。
public open operator fun equals(other: Any?): Boolean
Kotlin 的 == 就相當於 Java 的 equeals,表示比較內容。
Kotlin 的 === 就相當於 Java 的 ==,表示比較對象是否相同。
5.2 字符串模板
在 Kotlin 中,字符串可以包含模板表達式,模板表達式由 $ 開頭,如果需要進行表達式運算,可以寫在 {} 裏面
var a: Int = 1
var b: Int = 2
// Java
println("" + a + " + " + b + " = " + (a + b))
// 字符串模板
println("$a + $b = ${a + b}")
// print: 1 + 2 = 3
// 原始字符串
var rawString = """
a
b
${a + b}
"""
六、數組
Kotlin 中的數組由 Array 類表示,表示以一系列的對象,可以使用函數 arrayOf 來創建數組,示例如下
val arrayOfString: Array<String> = arrayOf("fancy", "luo")
val arrayOfUser: Array<UserInfo> = arrayOf(
UserInfo("fancyluo", "音樂"),
UserInfo("jack", "籃球"))
可以看到,我們使用 val 來修飾數組,在 Kotlin 中,數組是不可變的。上面數組裏我們放的都是對象,那麽基本類型的數組呢?Kotlin 中為了防止裝箱拆箱的操作,為每個基本類型都專門定制了相應的數組類型,從而避免過度裝箱的消耗。例如:IntArray,CharArray 等等
val arrayOfInt: IntArray = intArrayOf(1, 2, 3)
val arrayOfChar: CharArray = charArrayOf(‘中‘, ‘國‘)
七、區間
區間是一個數學上的概念,表示範圍。Kotlin 中區間是 ClosedRange 接口的子類,一般比較常用的是 IntRange。
// 閉區間 [0,1024]
var range: IntRange = 0..1024
// 半開區間 [0,1024) = [0,1023]
var untilRange = 0 until 1024
fun main(args: Array<String>) {
// 判斷是否在區間中
print(666 in range))
// 區間叠代
for (i in range) {
print("$i, ")
}
}
八、空類型安全
fun getName(): String{
return null
}
上面的代碼在編譯器裏是會報錯的,普通情況下,Kotlin 中是不允許返回 null 類型的,這也就表明,我們在取這個值的時候,無需擔心,直接使用即可。那我們就是想返回 null 呢? 在返回值後面加個 ? 即可。
fun getName(): String?{
return null
}
但是,返回了空類型之後,要使用這個函數就不是這麽簡單了,如果你並不確定此函數返回的是否為空,那麽你需要在函數後面加上一個?,如果你確定的知道此函數不會返回空,那麽你可以在函數後面加上 !! 表示我明確知道返回值不為空,可放心使用。
// 此行代碼會報錯
var nameLength = getName().length
// 不確定是否為空
var nameLength = getName()?.length
// 確定不為空
var nameLength = getName()!!.length
// getName 不為空則返回值,為空則不再執行後面的邏輯
var nameLength = getName() ?: return
Kotlin 基礎 - 數據類型