在Kotlin中,类型系统将可空类型和不可空类型进行了区分,例如,String为不可空类型,String?为可空类型,如果将不可空类型赋值为null将会编译不通过。
在Kotlin中,类型系统区分可以可空类型和不可空类型。例如,类型的常规变量String
不能为空:
var a: String = "abc"
a = null // compilation error
为了允许空值,我们可以声明一个变量为空字符串,写成String?
:
var b: String? = "abc"
b = null // ok
现在,如果您调用方法或访问某个属性a
,它肯定不会导致NPE,因此您可以放心地说:
val l = a.length
但是如果你想访问同一个属性b
,那就不安全了,编译器报告一个错误: