一、可null類型
爲了避免java中經常出現的NullPointerException問題,Kotlin引入了對null的控制。
我們以整型爲例。
- Int則一定不爲null,使用其方法或屬性時,可以正常調用
- 而Int?則有可能爲null使用式,使用時需要進行先判空,否則無法正常調用其屬性或方法
包括Boolean?
類型,也不能直接用作分支判斷。 使用時需要用if(b == true)
進行判斷,因爲此時的b
的取值包括:true
、false
、null
var b:Boolean? = true
if(b == true){
println("b is ${b}")
}
二、安全調用
使用 ?
可進行安全調用。例如
var str2: String? = "zincPower"
// 無法直接調用
// println(str2.length)
// 只有當str2不爲null時,則會調用length,得到長度,否則返回null
println(str2?.length)
str2 = null
// 返回null,不會NullPointerException
println(str2?.length)
使用 let
操作符,進行安全調用需要的代碼邏輯
str2 = "jpy"
// 會調用後續的代碼邏輯
str2?.let {
println("My name is $str2.")
}
str2 = null
// 後續的代碼邏輯不會被調用
str2?.let {
println("My name is $str2.")
}
三、Elvis 運算
對 if 分支的簡化,即?:
,當?:
不爲null,則返回?:
左邊的表達式,否則返回?:
右邊表達式。
var str3:String? = "XPY"
println(str3?:"It's null")
str3 = null
println(str3?:"It's null")
四、強制調用
使用!!.
則可以忽略變量是否需要進行檢測null。但有可能會引起NullPointerException
str3:String? = null
str3!!.length