?
将类型标记为可空,在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;