Null安全性
1、定义变量
定义一个变量不能为null
var a: String = "abc"
a = null // 编译错误
若想要允许为null
,可以声明一个可空的字符串,写作String?
var b: String? = "abc"
b = null // OK
2、安全调用 ?.
访问a
和b
的方法/属性
val leng1 = a.length
val leng2 = b.length //错误,b可为空
val leng3 = b?.length //b是非空的返回长度,否则返回null
3、与空指针有关的几种操作符
(?.)操作符
val leng3 = b?.length
//当b不为空时返回其长度,为空时返回null
(!!)操作符
val leng = b!!.length
//当b不为空时返回其长度,为空时报NPE
(?:)Elvis操作符
val l = b?.length ?: -1
//当b不为空时,执行"?."左边操作,返回b长度,为空是执行右边操作返回-1
(as?)安全转型操作符
对于有些数据强制转换会报ClassCastException
或者TypeCastException: null cannot be cast to ...
,此时需要使用安全转型操作符as?
val aInt: Int? = a as? Int
注:空指针异常NPE:NullPointerException