Z
ZHANK
Kotlin 入门

空安全

可空类型 ?、安全调用 ?.、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           // 转换失败抛异常