Menu
CoddyTech

安全调用运算符

本课属于 Coddy Kotlin 学习旅程的“基础知识”单元。第 14 课,共 93 课。

如果你有一个可空变量,就不能直接调用它的方法或访问它的属性:编译器不允许这样做,因为它的值可能为 null。安全调用运算符 ?. 可以巧妙地解决这个问题。

访问可空类型的成员时,不使用普通的点号 .,而是使用 ?.,这样更安全:

fun main() {
    val name: String? = "Alice"
    val length = name?.length  // 返回 5
    println(length)
    
    val nullName: String? = null
    val nullLength = nullName?.length  // 返回 null(不会崩溃!)
    println(nullLength)
}

安全调用运算符会在访问属性或方法之前检查值是否为 null。如果值为 null,整个表达式会返回 null,而不会崩溃。如果值存在,它的作用就和普通调用一样。

你还可以将多个安全调用串联起来:

fun main() {
    val text: String? = "Hello"
    val result = text?.uppercase()?.length
    println(result)  // 输出:5
}

如果链中的任何部分为 null,整个表达式都会安全地返回 null,不会抛出错误。

challenge icon

挑战

简单

已为你提供以下可空变量:

val message: String? = "Kotlin"

使用安全调用运算符来:

  1. 获取 message 的长度并打印出来
  2. 将 message 转换为大写并打印结果

然后,再创建一个可空变量:

val empty: String? = null

使用安全调用运算符获取 empty 的长度并打印出来。

每个结果都应单独打印在一行中。请记住:当值为 null 时,安全调用运算符会返回 null。

亲手试试

fun main() {
    val message: String? = "Kotlin"
    
    // TODO: 使用安全调用运算符获取 message 的长度并打印出来
    
    // TODO: 使用安全调用运算符将 message 转换为大写并打印出来
    
    val empty: String? = null
    
    // TODO: 使用安全调用运算符获取 empty 的长度并打印出来
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Kotlin 在线编辑器