在 Kotlin 中,!!
和 ?.
是处理可为空类型的不同方法,都与 null 安全相关。
!! (非空断言符)
!!
运算符称为非空断言符。当在变量或表达式之后使用它时,它告诉编译器将表达式视为不可为空,即使类型可以为空。
当你认为你所使用的对象肯定不为空的时候,可以使用 !!
来进行非空断言,这样能绕过编译器的空类型检查。
除非完全清楚为什么要使用它,不然非常不推荐使用非空断言。因为如果真的出现了
null
的情况,那就会抛出NullPointException
/ 空指针异常
例子:
val size = list!!.size // 如果 list 不为空,则返回 list.size,如果 list 为空,则会抛出 NullPointerException 异常
?. (安全调用运算符)
它用于执行安全调用,如果运算符左侧的表达式为 null,则整个表达式的计算结果为 null,并且不会引发异常。
val size: Int? = list?.size // 如果 list 为 null,则 size 为 null
安全调用运算符( ?.
)是 Kotlin 实现空安全的一个关键特性。它允许安全的调用可空类型,来预防空指针异常。
总结
!!
是一个非空断言运算符,强制断言某个值不为空,但是如果出现空值会抛出 NullPointerException
。
?.
是安全调用运算符,允许安全访问可为空类型的属性或方法,而不会带来运行时异常的风险。
通常建议使用安全调用运算符和其他空安全功能来编写更安全、更健壮的代码。