为什么需要空安全
在java中我们经常会因为一个变量没能正确判断是否非空而导致程序崩溃,java中需要我们去自己判断这个参数是否为空,但是在kotlin中会在编码的过程中保证是空安全的(并不是说不能为空,而是说如果是空的,那么会返回null,或者throwError),kotlin会通过不断爆红的方法去防止出现运行时因为空崩溃,虽然这种做法会使编码的过程更加困难,但是报错的bug肯定要比运行时bug好解决的多。
可空类型和非可空类型
在kotlin中变量默认是不能为空的
var string :String = null
这个是会报错的,变成var string :String? = null
在一个参数后面加入问号说明这是一个可空变量
null 和 空之间的区别
- null 是指对象的指针指向了一个空的地方,这个指针指向了null,是安全的
- 对象为空其实是指的一个对象没能初始化,在未声明一个变量lateinit的时候,JVM会自动为变量分配一个内存地址,但是没有初始化,如果在这个时候访问这个对象会导致访问空指针出现NPE问题(nullpointerError)
kotlin问号和双感叹号(?.和!!)
b?.length
如果 b 非空,就返回 b.length,否则返回 null
b!!
非空断言运算符(!!)将任何值转换为非空类型,若该值为空则抛出异常。