fun main() {
var str = ""
var str2: String= null
if (str2 != null){
str = str2
}else{
str = "NULL"
}
//上面if代码等价如下
str = str2?:"NULL"
}
来之gpt3.5的回答
在 Kotlin 中,?:
和 ?
都与可空类型(nullables)相关,但它们用于不同的场景。
-
?:
操作符:空合并操作符(Elvis 操作符)
?:
操作符用于处理可空表达式。当我们有一个可空的引用时,?:
操作符可以用来指定一个“当左侧表达式的结果为null
时使用的默认值”。这个操作符常常用于简化null
检查的代码。例如:
val name: String= null val nameToPrint = name ?: "Unknown" // 如果 name 为 null,则使用 "Unknown" println(nameToPrint) // 输出 "Unknown"
在这里,如果
name
是null
,则nameToPrint
会被赋值为"Unknown"
,否则nameToPrint
将被赋值为name
的值。 -
?
操作符:可空类型操作符和安全调用操作符- 作为可空类型操作符,
?
放在类型后面表示该变量可以持有null
值。 - 作为安全调用操作符,
?
放在变量后面用于在该变量可能为null
的情况下安全地调用其方法或属性。如果变量为null
,则不执行调用,直接返回null
。
例如:
val name: String= null println(name?.length) // 使用 安全调用,name 为 null,所以不会调用 length,输出为 null
- 作为可空类型操作符,
总结一下,?:
是用于提供一个在表达式结果为 null
时的默认值,而 ?
用于声明一个变量可以为 null
或者用于在链式调用中安全地访问一个可能为 null
的对象的成员。