Avatar ·

Kotlin中的null/nil是什么以及如何处理它?

大家好!我在Java之后开始学习Kotlin,但始终无法完全理解该语言中null的概念。在Java中,null是一个可以赋值给任何对象的普通引用,我们一直在与NullPointerException作斗争。而在Kotlin中,据我所知,类型默认是非空的,要处理null需要使用特殊的构造。

我有几个具体的问题和困惑:

  1. 我是否正确理解String?(带问号)是可空类型,而String是非空类型?如果我尝试将null赋值给不带问号的String类型变量,会出现编译错误?
  2. 我尝试写了一段简单的代码,但无法编译:
fun main() {
    val name: String? = null
    println(name.length) // 错误:只允许安全调用(?.)或非空断言(!!.)
}

我原本期望在运行时抛出异常,就像在Java中那样。