(六)Kotlin简单易学 基础语法-安全调用操作符
安全调用操作符
?这次Kotlin不报错了,编译器看到有安全调用操作符,所以知道如何检查null值。如果遇到null值,它就跳过函数调用,而不是返回null。
如下图,调用 ?. 如果遇到null值,它就跳过函数调用,而不是返回null,也就是不会发生空指针了。
使用带let的安全调用
?安全调用允许在可空类型上调用函数,但是如果还想做点额外的事,比如创建新值或判断不为null就调用其他函数,怎么办?可以使用带let函数的安全调用操作符。你可以在任何类型上调用let函数,它的主要作用是让你指定的作用域内定义一个或多个变量。
fun main(){
var str:String?="butterfly"
str =""
str = str?.let{
if(it.isNotBlank){
}else{
"butterfly"
}
}
print(str)
}
使用非空断言操作符
?!!.又称感叹号操作符,当变量值为null时,会抛出KotlinNullPointerException。
fun main(){
var str:String?="butterfly"
str =""
str!!.capitalize()
print(str)
}
使用if判断null值情况
?我们也可以使用if判断,但是相比之下安全调用操作符用起来更灵活,代码也更简洁,我们可以使用安全操作符进行多个函数的链式调用
java 判断空 | kotlin判断空 |
---|
if(str!=null){srt= str.capitalize} else { print(“为null”)} | str = str?.capitalize()?.plus(“is great”) |
使用空合并操作符
??: 操作符的意思是,如果左边求得值结果为null,就使用右边的结果值。
fun main(){
var str:String?="butterfly"
str = str?.capitalize()?.plus("is great")
str = ""
print(str?:"jack")
}
与.let 配合使用:
fun main(){
var str:String?="butterfly"
str = str?.let{it.capitalize()} ?:"butterfly"
}
|