Kotlin中Elvis运算符使用疑问:为何代码未按预期输出?
为什么这段Kotlin代码没有输出预期的"Bonjour"?
先看你给出的代码:
fun main() { var a:String? = null var b:String? = "Hello" var result1 = a?:"Gracias" var result2 = b?:"Bonjour" println(result2) }
问题出在Kotlin的**Elvis操作符(?:)**的逻辑上:
- 这个操作符的作用是:当左侧的可空变量不为
null时,直接返回变量的值;只有当变量为null时,才返回右侧的默认值。 - 你的代码里,变量
b被明确赋值为"Hello",它不是null,所以b?:"Bonjour"会直接取b的值"Hello",而不会用到右侧的"Bonjour"。 - 最终
println(result2)输出的就是"Hello",而非你预期的"Bonjour"。
如果想让代码输出"Bonjour",你需要把b的值设为null,比如:
var b:String? = null
内容的提问来源于stack exchange,提问作者Raghul G
相关产品推荐
相关产品推荐

