1)?.操作符
//执行逻辑
if (person != null) {person.doSomething()
}
//表达式
person?.doSomething()
2)?:操作符
//执行逻辑
val c = if (a != null) {a
} else {b
}
//表达式
val c = a ?: b
3)!!表达式
var message: String? = "Hello!"fun main() {if (message != null) {printUpperCase()}
}fun printUpperCase() {println(message!!.toUpperCase())
}/*解释:此处message为可空类型,但在主函数中已进行空值判定;
因而在调用printUpperCase方法时,message不可能为空值;
故而在其末尾加上!!操作符,知会编译器此处不再做空值检查*/
4)let函数
let函数搭配是?.操作符,在存在多次调用时,可以显著减少目标对象的调用次数
fun study(student: Student) {student?.let {it.preview()it.takeNotes()it.review()}
}/*解释:这里在?.操作符判定student不为空值后,
调用let函数并将student作为参数传入Lambda表达式*/