Kotlin可空和非可空類型
Kotlin null
安全性是一種消除代碼中空引用風險的過程。 如果Kotlin編譯器發現任何null
參數而仍然執行null
引用相關語句,則會立即拋出NullPointerException
。
Kotlin的類型系統旨在消除代碼中的NullPointerException
。NullPointerException
只能用於以下原因:
- 強行調用拋出
NullPointerException
; - 未初始化此運算符,可在構造函數中傳遞並在某處使用。
- 使用外部Java代碼作爲Kotlin,是Kotlin與Java互操作性。
Kotlin可空類型和非可空類型
Kotlin類型系統區分可以保持null
(可空引用)和不能保持null
(非null
引用)的引用。 通常,String
類型不可爲null
。 要創建保存null
值的字符串,必須通過放置一個?
來明確定義它們。 例如,在String後面使用:String?
可空類型
通過放置一個?
來聲明可空類型?
在String後面:
var str1: String? = "hello"
str1 = null // ok
Kotlin可空類型的例子
fun main(args: Array<String>){
var str: String? = "Hello" // 變量被聲明爲可空
str = null
print(str)
}
執行上面示例代碼,得到以下結果 -
null
非可空類型
非可空類型是普通字符串,它們聲明爲String
類型:
val str: String = null // compile error
str = "hello" // compile error Val cannot be reassign
var str2: String = "hello"
str2 = null // compile error
將null
值賦給非可空字符串時會發生什麼?
fun main(args: Array<String>){
var str: String = "Hello"
str = null // compile error
print(str)
}
它將生成編譯時錯誤,如下所示 -
Error:(3, 11) Kotlin: Null can not be a value of a non-null type String
在條件中檢查null
Kotlin的if
表達式用於檢查條件並返回值。
fun main(args: Array<String>){
var str: String? = "Hello" // variable is declared as nullable
var len = if(str!=null) str.length else -1
println("str is : $str")
println("str length is : $len")
str = null
println("str is : $str")
len = if(str!=null) str.length else -1
println("b length is : $len")
}
執行上面示例代碼,得到以下結果 -
str is : Hello
str length is : 5
str is : null
b length is : -1