語言中對(duì)空值的檢測(cè)是為了避免出現(xiàn)空指針的異常。
在類型的最后增加一個(gè)問號(hào)可以指定一個(gè)變量可以為null豪娜;因?yàn)樵趉otlin中一切都是對(duì)象磨隘,甚至java中的原始數(shù)據(jù)類型脖隶,一切都可以是null的。
val a:Int?=null
這樣就標(biāo)記了 a
是一個(gè)可以為null的變量潦蝇,在沒有進(jìn)行檢查是否為null之前是不能直接使用它的款熬。
判斷是否為空的方法很多,可以使用if語句去判斷攘乒,kotlin給我們比較簡(jiǎn)單的方法贤牛,安全訪問操作符(?
)。
val a:Int?=null
....
a?.tostring()
這里使用了安全訪問操作符(?
)则酝,只有這個(gè)變量不是null的時(shí)候才去指定這行代碼殉簸,否則的話不會(huì)執(zhí)行這行代碼。
Elvis operator(?:
)
這個(gè)操作符可以判斷是否為空沽讹,如果為空可以做一些操作般卑。
val a:Int?=null
val s=a?.toString() ?:"sss"
val t=a?.toString()?:return false
val x=a?.toSting()?:throw IllegalStateException()
這個(gè)操作符的作用就是,當(dāng)a
為空的時(shí)候爽雄,執(zhí)行?:
后邊的語句蝠检,例如上段代碼的第二句,a
是null
挚瘟,那么s
就被賦值為"sss"
叹谁;第三句a
是null
,那么當(dāng)前語句所在的方法就會(huì)返回false乘盖;第四句a
是null
焰檩,那么就會(huì)拋出IllegalStateException()
異常。
跳過限制檢查的操作符(!!
)
如果我們?cè)谑褂靡粋€(gè)可null的類型的變量订框,但是可以確定這個(gè)變量是非null的析苫,那么我們就可以使用!!
操作符來強(qiáng)制編譯器執(zhí)行可null類型時(shí)跳過限制檢查。但是如果a為null的話,這段代碼就會(huì)崩潰衩侥。
val a: Int? = null
val s=a!!.toString()