空安全
nul
**>在Java中我们司空见惯的空指针异常NullPointerException,
带给了我们很多麻烦。Kotlin作为更强大的语言,
势必会基于以往的语言设计经验对其进行改良。Kotlin更以编译时错误的方式,
提前在编译期强迫我们多地把运行时可能会出现的nuI问题重视起来,
而不是等到运行时报错,防范于未然,提高了我们程序的健壮性**
可空类型和非可空类型
kotlin区分可空类型和非可空类型,所以,你要一个可空类型变量运行,
而它又可不存在,对于这种潜在危险,编译器时刻警着。
为了应对这种风险,Kotlin不允你在可空类型值上调用函数,除非你主动接手安全管理
var str:String?="哈哈哈"
println(str)
使用带let的安全调用
安全调用允许在可空类型上调用函数,但是如果还想做点额外的事,
比如创建新值>或判断不为null就调用其他函数,怎么办?可以使用带let函数的安全调用操作符。
你可以在任何类型上调用let函数,它的主要作用是让你在指定的作用域内定义一个或多个变量。
var str:String?="butterfly"
**str =""**
str=str?.let { **let 函数返回的是表达式最后一行返回的结果**
**非空白的字符串**
if(it.isNotBlank()){
it.capitalize()**将字符串的首字母变成大写**
}else {
"butterfly"
}
}
println(str)
空安全断言操作符
选项二:使用非空断言操作符 !!.又称感叹号操作符,当变量值为null是会抛出KotlinNullPointerException。
var str:String?="butterfly"
str=null
// println(str!!.capitalize()) //使用感叹号非空断言操作符
if(str!=null){
str=str.capitalize()
}else {
println("为null")
}
空合并操作符
使用空合并操作符?:操作符的意思是,如果左边的求值结果为nul,就使用右边的结果值
str=str?.capitalize()?.plus("is great")
println(str)
println(str?:"xuqing")
str="xuqing"
//空合并操作符也可以和let函数一起使用来代替if/else语句
str=str?.let { it.capitalize() }?:"butterfly"
println(str)