1、定义可空类型
fun main(){
// 定义可空类型
var x:String? = "hello"
x = null
}
2、!! 强转类型
定义可空类型之后,如果使用其内置方法,编译不会通过,因为值有可能为null,可以使用 !! 把类型强转为不可空:
fun main(){
// 定义可空类型
var x:String? = "hello"
// 此时x值确定为不可空类型,所以可以调用length方法
val y = x!!.length // y 类型为 int 类型
println("${y.javaClass.simpleName}") // int
}
注意事项:上边!! 运算符不是安全的,因为如果该值是否为空,会报空指针异常。
3、?. 安全访问运算符
定义及使用
fun main(){
// 定义可空类型
var x:String? = "hello"
// 获取字符串长度:如果x不为空,则返回其长度,否则返回0
var y = x?.length?:0
println(y) // 5
x = null
y = x?.length?:0
println(y) // 0
}
注意事项:
(1) ?. 为安全访问,判断逻辑是:x?.length 只有x值不为空时,才会调用 .length。
(2)上边 ?: 运算符 是安全的,判断逻辑是: 如果 ?: 前边值为空,则使用后边定义的值。