可为空类型和非空类型
Kotlin系统旨在消除代码中的空引用,也被称为The Billion Dollar Mistake。
在其他语言中的一个很常见的陷阱,包括Java,就是引用了一个对象的空引用,导致一个空异常。Java中的对应异常就是NullPointerException或者NPE作为简称。
Kotlin类型系统旨在消除代码中空指针。会造成空指针的方式可能是如下的几种情形:
- 显示的抛出NullPointerException()
- 使用了!!操作符,下面的内容会有介绍
- 外部的Java代码导致的
- 有些数据与初始化的不一致(未被初始化的this变量在其他地方使用)
在Kotlin中,类型系统可以分辨出可能为空的引用(可为空的引用)和不能为空的引用。比如一个正常的String类型不能是空的:
var a: String = "abc"
a = null // 编译错误
为了允许存在null,我们可以声明一个变量可以为空,比如上面的例子:
var b: String? = "abc"
b = null // ok
现在,你可以放心的访问a的属性,它被保证不会产生空指针:
val l = a.length
但是如果你想要访问b的属性,那是不安全的:
val l = b.length // 可能会存在空指针