前言
你們好,這裏是「從零開始學 Kotlin 之『2 』數據類型」,本文首發於公衆號「Binguner」,歡迎前往你們關注。我會每週分享一些關於 Android 和其餘方向的技術乾貨或一些關於認知的文章。學習一門技術最好的方式就是去教會別人,因此,開始今天的學習吧!java
Kotlin 中的數據類型有基本數據類型和應用類型:正則表達式
而且對於基本的數據類型(相似於 int,float 等),Kotlin 不會區分其是數據類型仍是包裝類型,在運行的時候,數據會用最高效的方式顯示。ide
Kotlin 提供了與 Java 相似的數字類型函數
類型 | 位寬度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
可是要注意:Kotlin 中沒有隱式轉換(就像 Java 中能夠把 Int 轉換爲 Long),想要進行數字轉換,須要使用轉換函數:學習
val a:Byte = 1 val b:Int = a // 錯誤,編譯器會提示所需類型爲 Int,而提供的類型爲 Byte val c:Int = a.toInt() // 成功
每種數字類型都支持如下的數字轉換方法:測試
裝箱是指將基本數據類型轉換爲其對應的包裝器類型,
拆箱就是將包轉器類型轉換爲基本數據類型。spa
在 Java 中:指針
Integer x = 123; // 是一個裝箱操做 int y = x; // 是一個拆箱操做
而 Kotlin 中如何裝箱拆箱呢?code
val i1 = 123 // 拆箱 val i2:Int? = 123 // 裝箱
想要了解其背後具體原理,能夠本身動手將 Kotlin 代碼編譯成 Java 字節碼一探究竟。視頻
爲基本數據類型賦值的值稱爲字面常量。
Kotlin 中的字面常量有如下三種:
相似:123,Long 類型的用大寫 L 標記:123L
相似:0x0F
相似:0b00001011
另外,Kotlin 並不支持八進制。但卻默認支持 Double 和 Float。
例如:123.5,123.4e10,123f,123F 這些在 Kotlin 中都是支持的。
在聲明字面常量時,Kotlin 支持下劃線的聲明方式,使數字更加的易讀:
val oneMillion = 1_000_000 val creditCardNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = 0b11010010_01101001_10010100_10010010
Kotlin 中的字符使用 Char 表示,字符不能直接被看成數字來處理,必須經過 toInt() 方法被字符轉換爲數字類型
fun charToInt(c:Char):Int{ return c.toInt() }
Char 類的字面量用「' '」括起來,支持以下的轉義序列:
Kotlin 中的字符串和 Java 同樣用 String 申明,且不可變的。可是 Kotlin 中的字符串有一些新的特性。
val str = "Hello world!" for (i in 0..str.length-1){ print("${str[i]}_") } // 輸出 H_e_l_l_o_ _w_o_r_l_d_!_
val s = "Hello" + '_' println(s + "World") // 輸出 Hello_World
println("123_456_789".split("_".toRegex())) // 輸出 [123, 456, 789]
用其它方法分割字符串
val str = "Hello world!" println("substring1: ${str.substring(5)}") println("substring2: ${str.substring(0..4)}") println("substring3: ${str.substring(6,12)}") println("substringBefore: ${str.substringBefore(" ")}") println("substringAfter: ${str.substringAfter(" ")}") println("substringAfter: ${str.substringBeforeLast(" ")}") println("substringAfterLast: ${str.substringAfterLast(" ")}") // 運行結果: substring1: world! substring2: Hello substring3: world! substringBefore: Hello substringAfter: world! substringAfter: Hello substringAfterLast: world!
原始字符串用先後 3 個引號包圍
val rawStr = """ The first line, the second line, the third line. """.trimIndent() // 注意:若是「"""」所在行只有空格,這個方法會省略這些空白 println(rawStr) // 輸出: The first line, the second line, the third line.
原始字符串一般還用 trimMargin() 處理,trimMargin() 的參數是一個邊界前綴字符串,默認的參數是「|」,例以下面的例子,每一行的開頭是「|」,那麼就會以每一行的「|」爲輸出的開頭進行字符輸出。
val rawStr = """ | The first line, |the second line, |the third line. """.trimMargin("|") // 輸出: The first line, the second line, the third line.
Kotlin 中的布爾類型用 Boolean 表示,它的值有 true 和 false。
若須要可空引用時,布爾類型的值會被裝箱。
它支持的運算有:
Kotlin 致力於消除 NullPointerException 帶來的影響。在 Java 中若是咱們嘗試引用一個空的對象,就會致使空指針異常,可是在 Kotlin 中則不會。下面,咱們來看看 Kotlin 是怎麼作到的。
Kotlin 對可空類型和非空類型作了區分,例如:「Int」不可空,「Int?」可空
var str :String? = null println(str?.length) // 輸出 null,而不是報空指針異常
在引用可空類型的時候,爲了不空指針異常,Kotlin 要求必須進行非空檢查:
var str :String? = "Hellp" // val length1 = str.length 這樣直接引用的時候,編譯器會報錯 // Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String? // 必須在可空類型上使用可空和非空斷言。 val length = str?.length // 此時若是 str 爲空,運行返回 null val length2 = str!!.length // 此時若是 str 爲空,運行會拋出異常 // 或者進行類型檢查 val length3 = if(str != null) str.length else 0
Any 是 Kotlin 中全部非空類型的超類,至關於 Java 中的 Object。
可空類型的超類是 Any?
Unit 能夠做爲函數的返回類型,表示沒有返回值或者返回值能夠忽略。
注意 Unit 是一個類,而且繼承自 Any。
這是定義它的源代碼:
public object Unit { override fun toString() = "kotlin.Unit" }
能夠看到 Unit 是用 object 定義的單例類型,調用它的 toString() 方法,只會返回 「Kotlin.Unit」。
而且 Unit 的返回類型會返回 Unit 類型!!!
fun test(){} val t = test() println(t::class.java) // 輸出 class kotlin.Unit
Kotlin 中函數返回類型若是用 Nothing 表示,則這個函數永遠不會返回任何類型。
一些測試函數不會返回任何類型,就須要聲明返回類型爲 Nothing,它們一般拋出異常來結束運行。
fun test(msg:String):Nothing{ throw IllegalStateException(msg) } test("test") // 此時程序會拋出異常:Exception in thread "main" java.lang.IllegalStateException: test
「從零開始學 Kotlin 之『2』數據類型」到這裏就結束了。
一下記住這麼多知識點有些困難,因此爲了方便你們的記憶與複習,我作了一張思惟導圖放到下面,你們能夠把圖片保存下來,有時間便去回顧學到的東西。
推薦閱讀:
歡迎關注本文做者,這個系列的文章會首發在這裏:
掃碼關注 + 回覆「kotlin」,獲取我整理的最新版 Kotlin 學習視頻。