為什么需要空安全
在java中我們經(jīng)常會因為一個變量沒能正確判斷是否非空而導(dǎo)致程序崩潰方灾,java中需要我們?nèi)プ约号袛噙@個參數(shù)是否為空,但是在kotlin中會在編碼的過程中保證是空安全的(并不是說不能為空筷狼,而是說如果是空的,那么會返回null氨距,或者throwError)桑逝,kotlin會通過不斷爆紅的方法去防止出現(xiàn)運行時因為空崩潰,雖然這種做法會使編碼的過程更加困難俏让,但是報錯的bug肯定要比運行時bug好解決的多楞遏。
可空類型和非可空類型
在kotlin中變量默認(rèn)是不能為空的
var string :String = null
這個是會報錯的,變成var string :String? = null
在一個參數(shù)后面加入問號說明這是一個可空變量
null 和 空之間的區(qū)別
- null 是指對象的指針指向了一個空的地方,這個指針指向了null首昔,是安全的
- 對象為空其實是指的一個對象沒能初始化寡喝,在未聲明一個變量lateinit的時候,JVM會自動為變量分配一個內(nèi)存地址勒奇,但是沒有初始化预鬓,如果在這個時候訪問這個對象會導(dǎo)致訪問空指針出現(xiàn)NPE問題(nullpointerError)
kotlin問號和雙感嘆號(?.和!!)
b?.length
如果 b 非空,就返回 b.length赊颠,否則返回 null
b!!
非空斷言運算符(!!)將任何值轉(zhuǎn)換為非空類型格二,若該值為空則拋出異常。