空安全
可空类型 ?、安全调用 ?.、Elvis ?:、!! 断言、平台类型
空安全
Kotlin 的类型系统从编译期杜绝 NullPointerException——这是它最重要的特性。
学完本章你将: 掌握可空类型 ?、?. 安全调用、?: Elvis、!! 断言。
可空与非空类型
kotlin
var nonNull: String = "Hello"
// nonNull = null // ❌ 编译错误
var nullable: String? = "Hello"
nullable = null // ✅ 允许
安全调用 ?.
kotlin
val str: String? = "Hello"
println(str?.length) // 5——安全调用
// 如果 str 为 null,返回 null 而不是崩溃
// 链式安全调用
user?.address?.city?.name // 任意一环为 null 则返回 null
Elvis 运算符 ?:
kotlin
val str: String? = null
val len = str?.length ?: 0 // 如果 null,用默认值 0
val name = user?.name ?: "匿名"
!! 非空断言
kotlin
val str: String? = "Hello"
println(str!!.length) // 强制——我保证不为 null
val nullStr: String? = null
// println(nullStr!!) // ❌ 运行时 NullPointerException
⚠️
!!是"我比编译器更聪明"——崩了别怪编译器。
安全的类型转换
kotlin
val obj: Any = "Hello"
val str: String? = obj as? String // 转换失败返回 null
// val str = obj as String // 转换失败抛异常