官网怎么说?
https://kotlinlang.org/docs/null-safety.html#the-operator
哪一个有空指针风险?
!!
,看下面的示例代码:
class TestList {
init{
var list: ArrayList<String>? =null
println(list!!.size)
}
}
fun main(args: Array<String>) {
TestList()
}
什么情况下使用!!
?
需要抛出NPE的时候,例如:kotlin中list!!.size
相当于java中的:
if (list!=null) {
list.size();
}else {
throw new NullPointerException();
}
什么情况下使用?
?
大多数情况下,都使用?
,例如:
class Person {
var name: String = ""
var age = 0
}
class TestList {
init {
var list: ArrayList<String>? = null
println(list?.size)
var person: Person? = null
println(person?.name)
}
}
fun main(args: Array<String>) {
TestList()
}
此外,补充一个操作符?:
,例如:A?:B
,表示A对象为空时,返回B对象。常见用法:
val roomList: ArrayList<Room>? = null
if (roomList?.size ?: 0 > 0) { // 这一行添加了?:
Log.d("TAG", "-->> 房间数不是0")
}