T?
T가 null 이면 실행을 멈춘다
T?:<default>
T가 null 이면 default 를 실행한다
T!!
T가 null 이어도 그대로 실행한다.
[code]
fun main() {
var a: String? = null
println(a?.toUpperCase())
println(a?:”default”.toUpperCase())
println(a!!.toUpperCase())
}
[/code]
실행결과
[code]
null
DEFAULT
Exception in thread “main” java.lang.NullPointerException
at FileKt.main (File.kt:5)
at FileKt.main (File.kt:-1)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2)
[/code]
null safe 연산자는 스코프 함수와 사용하면 편리하다.
[code]
fun main() {
var a: String? = null
a?.run {
println(toUpperCase())
println(toLowerCase())
}
}
[/code]
실행결과는 아무것도 나오지 않는다. a가 null 이기 때문에 스코프내의 코드가 실행되지 않는다.