ITmob-Ly
发布于 2024-01-15 / 125 阅读
0

Kotlin 中的 !! 和 ?. 之间的主要区别是什么?

Kotlin-Blog

在 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

?. 是安全调用运算符,允许安全访问可为空类型的属性或方法,而不会带来运行时异常的风险。

通常建议使用安全调用运算符和其他空安全功能来编写更安全、更健壮的代码。