非空断言运算符 (!!) 奇怪的行为

joa*_*kie 1 compiler-errors nullpointerexception kotlin

我正在使用当前最新的 Kotlin 版本 ( 1.9.22) 并遇到了我无法解释的行为。

此代码会产生运行时错误 ( NullPointerException):

fun main() {
    var name: String? = null
    println(name!!.length)
}
Run Code Online (Sandbox Code Playgroud)

虽然此代码会产生编译错误 ( Unresolved reference: length)

fun main() {
    var name: String? = "Joe"
    name = null
    println(name!!.length)
}
Run Code Online (Sandbox Code Playgroud)

为什么简单地对可为 null 的name变量进行重新分配就可以让我免于陷入困境NullPointerException?我希望这两个代码片段在功能上是相同的。

Vla*_*iev 6

在第二个片段中,name = null smart 将其转换为Nothing?,这就是.length无法解析的原因