语言中对空值的检测是为了避免出现空指针的异常。
在类型的最后增加一个问号可以指定一个变量可以为null;因为在kotlin中一切都是对象,甚至java中的原始数据类型,一切都可以是null的。
val a:Int?=null
这样就标记了 a
是一个可以为null的变量,在没有进行检查是否为null之前是不能直接使用它的。
判断是否为空的方法很多,可以使用if语句去判断,kotlin给我们比较简单的方法,安全访问操作符(?
)。
val a:Int?=null
....
a?.tostring()
这里使用了安全访问操作符(?
),只有这个变量不是null的时候才去指定这行代码,否则的话不会执行这行代码。
Elvis operator(?:
)
这个操作符可以判断是否为空,如果为空可以做一些操作。
val a:Int?=null
val s=a?.toString() ?:"sss"
val t=a?.toString()?:return false
val x=a?.toSting()?:throw IllegalStateException()
这个操作符的作用就是,当a
为空的时候,执行?:
后边的语句,例如上段代码的第二句,a
是null
,那么s
就被赋值为"sss"
;第三句a
是null
,那么当前语句所在的方法就会返回false;第四句a
是null
,那么就会抛出IllegalStateException()
异常。
跳过限制检查的操作符(!!
)
如果我们在使用一个可null的类型的变量,但是可以确定这个变量是非null的,那么我们就可以使用!!
操作符来强制编译器执行可null类型时跳过限制检查。但是如果a为null的话,这段代码就会崩溃。
val a: Int? = null
val s=a!!.toString()