这是 Kotlin 最强大的特性之一。在 Kotlin 中,类型系统严格区分了”可空”和”不可空”。
1. 默认不可空
var name: String = "Null猫"
name = null // ❌ 编译报错!String 类型不允许为 null2. 可空类型 (用 ? 表示)
如果你允许一个变量为 null,必须在类型后面加上 ?:
var nullableName: String? = "Null猫"
nullableName = null // ✅ 允许3. 如何安全地调用可空变量?
当你有一个 String? 变量时,不能直接调用它的方法(比如 .length),编译器会拦截:
val length = nullableName.length // ❌ 编译报错安全调用符 ?.
如果变量不为 null 则调用,否则返回 null:
val length = nullableName?.length // ✅ 返回 Int? 类型Elvis 运算符 ?:(空合并)
如果左边为 null,则返回右边的值:
val length = nullableName?.length ?: 0
// 解释:如果 nullableName 为 null,length 的值就是 0安全转换 as?
如果转换失败,不会抛出异常,而是返回 null:
val number: Int? = "123" as? Int // 转换失败时,number 为 null非空断言 !!
如果你非常确定这个变量此时绝对不是 null,可以使用 !! 强行调用。但如果判断失误,就会抛出空指针异常:
val length = nullableName!!.length // ⚠️ 除非万不得已,否则不推荐
评论交流
欢迎留下你的想法