Kotlin中非空变量为何可与null值相加?运行会崩溃吗?
Kotlin字符串与null相加的疑问解答
问题1:非空String变量与可能为null的变量相加为何合法?
Kotlin里String类的plus运算符(对应+符号)的参数类型是Any?,它的定义如下:
public operator fun String.plus(other: Any?): String
这个方法允许接收任意类型的参数(包括可空类型),当右侧是null时,Kotlin会自动将其转换为字符串"null",而非触发空指针相关的编译错误,所以userData = userData + s(s可能为null)的写法在编译阶段完全合法。
问题2:userData = userData + null的执行结果是什么?会崩溃吗?
执行后userData的值会变成"OKnull",App运行时不会崩溃。
因为String.plus(null)内部会把null处理成字符串字面量"null",再和原字符串拼接。比如初始userData是"OK",执行拼接操作后就会得到"OK" + "null" = "OKnull"。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

