当Elvis运算符的两个表达式均为null时,会返回哪一个?
关于Kotlin中
str ?: null返回哪个null的解答 哈哈,这个问题确实有点“钻牛角尖”但挺有意思的!咱们来一步步理清楚:
首先得回忆Kotlin里Elvis运算符(?:)的核心逻辑:它是个短路求值的运算符——先计算左边的表达式,如果结果不为null,直接返回左边的值;只有当左边是null时,才会去计算右边的表达式,然后返回右边的结果。
回到你的代码:
var str: String? = null str ?: null
第一步,str被赋值为null;第二步执行str ?: null时,左边的str是null,所以触发了Elvis运算符的右侧分支,程序会计算右边的null字面量,然后返回这个null。
当然,从值的本质上来说,Kotlin里的null在JVM层面其实是同一个空引用,所以不管是左边变量的null还是右边字面量的null,实际运行时的标识是一样的。但从代码执行流程的角度,返回的确实是Elvis运算符右侧的那个null。
虽然这个场景完全没有实际业务价值,但能帮你更透彻理解Elvis运算符的执行规则,这种好奇心还是值得鼓励的😉
内容的提问来源于stack exchange,提问作者MDJ
相关产品推荐
相关产品推荐

