Kotlin语言的可空性
-
默认是不可空,即不能赋值为null
var name = "value" name = null//报错 -
将变量赋值为null:声明为可空类型
var name1:String ? = "value" println(name1) --> value name1 = null println(name1) --> null
Kotlin 中可空类型的安全调用方法
-
空安全操作符 ?
-
格式:变量 ?. 业务代码
-
逻辑:当变量为空时,业务代码不执行
-
代码:
fun main(){ var name : String ?= "value" println(name?.capitalize()) name = null println(name?.capitalize()) } -
运行结果
-
-
let函数:匿名函数
- 格式:变量?.let{}
-
逻辑:当变量为空时,let{}不执行
-
let 函数细节:
- 内部采用 it 指代调用者
- 括号最后一行为let的返回值
-
代码: “” 与 null 是两回事
fun main(){ var name : String = "" var res = name?.let{ if(it.isBlank()){ println("这个变量是空值") "空值" }else{ "[$name]" } } println("打印let函数的返回结果--->$res") } -
运行结果:
-
断言(!!):可能存在空指针异常
-
格式:变量 !!. 业务代码
-
逻辑:无论变量是否为null,业务代码均会执行
-
场景:对已赋值可空变量,消除编译器异常
-
代码:
fun main(){ var name:String ?= "value" name!!.let { println(name) } name = null name !!. let{ } } -
运行结果:
-
-
采用 if 语句:跟 Java一样
-
代码:
fun main(){ var name :String ?= null if(name == null){ println("name此时为null") }else{ println("name此时不为null,其值为$name") } } -
运行结果
-
-
空合并操作符 ?:
-
格式:变量 ?: 业务代码
-
逻辑:变量为空,执行业务代码
-
代码一:name不为空
fun main(){ var name : String ?= "WA" println("打印name值 $name" ?: "此时name为空") //配合let函数 println(name ?. let{"name不为空"} ?: "此时name为空") } -
运行截图一:
-
代码二:name为空
fun main(){ var name : String ?= "WA" name = null println("打印name值 $name" ?: "此时name为空") //配合let函数 println(name ?. let{"name不为空"} ?: "此时name为空") } -
运行截图二:
-