1. 烈炭?
聲明一個變量可為空。
var b: String? = "abc" // 可以設(shè)置為空
2. ?.
判空操作
2.1
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length) // 無需安全調(diào)用
如果 b 為空宝恶,返回 null符隙,否則就返回 b.length。
2.2
如果要只對非空值執(zhí)行某個操作垫毙,安全調(diào)用操作符可以與let 霹疫、run等一起使用:
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
item?.let { println(it) } // 輸出 Kotlin 并忽略 null
}
3. ?:
Elvis操作符。
如果 ?: 左側(cè)表達(dá)式為空综芥,則返回右側(cè)表達(dá)式丽蝎,否則返回左側(cè)表達(dá)式。 請注意,當(dāng)且僅當(dāng)左側(cè)為空時屠阻,才會對右側(cè)表達(dá)式求值红省。
val l = b?.length ?: -1
4. !!
非空斷言運(yùn)算符。若值為空則拋出異常国觉。
val l = b!!.length
我們可以寫 b!! 吧恃,這會返回一個非空的 b 值 (例如:在我們例子中的 String)或者如果 b 為空,就會拋出一個 NPE 異常麻诀。
5. as?
安全的類型轉(zhuǎn)換痕寓,如果嘗試轉(zhuǎn)換不成功則返回 null:
val aInt: Int? = a as? Int