Kotlin园地 地址:Kotlin 园地 | Android 开发者 | Android Developershttps://developer.android.google.cn/training/kotlinplayground?hl=zh-cn
以下简称 “K园”
先在K园执行以下代码:
fun main() {
var fa: String = "sandra on";
println("fa的长度是" + fa.length)
}
执行结果:fa的长度是9
以上代码中 变量 fa 只能存储String类型的数据,如果想声明变量 fa 可为 null 类型,则需要在变量类型后加 ? 运算符,如下所示:
fun main() {
var fa: String? = "sandra on";
println("fa的长度是" + fa.length)
}
执行结果:
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?只有安全(?.)或非空断言(!! !)调用被允许在类型为String的可空接收器上?
如果fa为null, fa变量上没有某些方法或者属性,比如 length, 则会报错,
解决方式:
方式一:使用 ?. 安全调用运算符,可以使用 ?.
安全调用运算符访问可为 null 变量的方法或属性。
修改一下代码:
fun main() {
var fa: String? = "sandra on";
println("fa的长度是" + fa?.length)
}
执行结果:fa的长度是9;
当fa 为 null 时,看一下:
fun main() {
var fa: String? = null;
println("fa的长度是" + fa?.length)
}
执行结果:fa的长度是null ; 不会报错了
方式二:使用 !!
非 null 断言运算符
如果使用 !! 非null断言运算符,即表示您断言变量的值不是 null , 当变量值为null , 使用 !! 非null断言运算符会导致系统抛出NullPointerException 错误,只有当变量不为null或者设置了适当的异常处理时,才可使用断言运算符,后续会写处理异常的文章;
fun main() {
var fa: String? = null;
println("fa的长度是" + fa!!.length)
}
方式三:if/else
语句可以与 null
检查一起使用
fun main() {
var fa: String? = null;
val long = if(fa != null) {
fa.length
} else {
0
}
println("fa的长度是" + long)
}
执行结果:fa的长度是0
方式四:使用 ?:
Elvis 运算符
Elvis运算是一个小技巧,其实就是if else 的简化写法。
fun main() {
var fa: String? = null;
val long = fa?.length ?: 0
println("fa的长度是" + long)
}
执行结果:fa的长度是0
fun main() {
var fa: String? = "记录据了解";
val long = fa?.length ?: 0
println("fa的长度是" + long)
}
执行结果:fa的长度是5