?
將類型標記爲可空,在Kotlin中變量默認非空,如果該變量可空,需要在類型後添加符號?
var str: String = null // 編譯器報錯
str變量值可能爲null的話,必須在變量類型後添加?
var str: String? = null // 編譯通過
?.
安全調用符
str變量可能爲null
var str: String? = null // 編譯通過
當一個可空的變量直接調用API時,編譯器會報錯
str.toInt() // 編譯報錯
解決辦法是使用安全調用符?.
調用API.
str?.toInt() // 編譯通過
// (?.)調用API相當於
if (str != null) {
str.toInt()
}
安全調用符調用API後值的接收
當使用?.
調用API後,返回值也是有可能爲null
// strToInt接收到可能爲null的值,但是strToInt變量當前是非空標記.
var strToInt: Int = str?.toInt() // 編譯錯誤
可以將strToInt也標記爲可空類型
var strToInt: Int? = str2?.toInt(); // 編譯通過
另外一種就是使用elvis操作符?:
// strToInt變量依然是非空類型,但是str2?.toInt()如果非空就取左側值,如果值爲空就取右側值(elvis操作符)
// 這樣一來strToInt接收的值肯定就不可能爲空了.
var strToInt: Int = str2?.toInt() ?: 0;