可為空型別允許變數儲存非空值或 null。要聲明可為空型別,可以在型別名稱後面添加 ? 符號。
val name: String? = null // 可為空的字串變數
非空型別表示變數必須始終包含非空值,不允許儲存 null。在 Kotlin 中,大多數變數默認是非空型別。如果希望明確聲明一個變數為非空型別,只需省略 ? 符號。
val age: Int = 30 // 非空的整數變數
如果嘗試將 null 賦值給非空型別的變數,編譯器將發出錯誤。
// 可為空型別
val name: String? = null
val length: Int? = name?.length // 使用安全調用運算符
// 非空型別
val age: Int = 30
val userName: String = "Alice"
val nameLength: Int = userName.length
val b: String? = "hahaha"
println(b.length) // <-- 編譯失敗
可為空(Nullable)型別在被存取時會有風險,立即被編譯器發現而編譯失敗,我們必須檢查該變數的值是否為 null,編譯器才能讓我們繼續。
val b: String? = "hahaha"
if (b != null) {
println(b.length)<-- 編譯成功
}