1. ?
声明一个变量可为空。
var b: String? = "abc" // 可以设置为空
2. ?.
判空操作
2.1
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length) // 无需安全调用
如果 b 为空,返回 null,否则就返回 b.length。
2.2
如果要只对非空值执行某个操作,安全调用操作符可以与let 、run等一起使用:
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
item?.let { println(it) } // 输出 Kotlin 并忽略 null
}
3. ?:
Elvis操作符。
如果 ?: 左侧表达式为空,则返回右侧表达式,否则返回左侧表达式。 请注意,当且仅当左侧为空时,才会对右侧表达式求值。
val l = b?.length ?: -1
4. !!
非空断言运算符。若值为空则抛出异常。
val l = b!!.length
我们可以写 b!! ,这会返回一个非空的 b 值 (例如:在我们例子中的 String)或者如果 b 为空,就会抛出一个 NPE 异常。
5. as?
安全的类型转换,如果尝试转换不成功则返回 null:
val aInt: Int? = a as? Int