Menu
CoddyTech

非空断言

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

安全调用运算符和 Elvis 运算符可以妥善处理空值,但有时你会非常确定,在代码的某个位置,可空值一定不是 null。非空断言运算符 !! 可以让你告诉 Kotlin:“我保证这里不是 null。”

fun main() {
    val name: String? = "Alice"
    val length = name!!.length  // 将 String? 转换为 String
    println(length)  // 输出:5
}

!! 运算符会将可空类型转换为对应的非空类型。不过,如果值实际上为 null,你的程序就会因 NullPointerException 而崩溃:

fun main() {
    val name: String? = null
    val length = name!!.length  // 程序在这里崩溃!
}

使用时机:只有在逻辑能保证值不为 null,但编译器无法验证时,才使用 !!。大多数情况下,优先使用安全调用 ?. 或 Elvis 运算符 ?:。非空断言应该是你的最后选择,而不是首选。

challenge icon

挑战

简单

编写一个函数 getUppercaseLength,它接收一个 text 参数,并返回其大写版本的长度。

该函数接收一个非空字符串值,但参数类型是可空的(String?)。使用非空断言运算符 !! 将其转换为非空类型,然后链式调用 uppercase() 方法并获取 length。

参数:

  • text(String?):一个可空字符串,保证包含一个值

返回值:文本大写版本的长度(Int)

注意:在这个挑战中,输入始终是有效字符串,不会是 null。这模拟了一种场景:你知道值存在,但编译器无法验证这一点。

亲手试试

fun getUppercaseLength(text: String?): Int {
    // 在这里编写代码
}
quiz icon自我测试

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

基础知识中的所有课

自己练习: Kotlin 在线编辑器