równość strukturalny a == b
jest tłumaczony
a?.equals(b) ?: (b === null)
Zatem przy porównywaniu z null
, równość strukturalny a == null
są przenoszone na referencyjnym równości a === null
.
Według docs, nie ma sensu w optymalizacji kodu, dzięki czemu można używać a == null
i a != null
Uwaga że jeśli zmienna jest właściwością zmienny, nie będzie w stanie się do inteligentnego odrzuć go do swojego typu nieululującego w instrukcji if
(ponieważ wartość mogła zostać zmodyfikowana przez inny wątek), a zamiast tego musiałbyś użyć operatora bezpiecznego połączenia z numerem let
.
Bezpieczne operator call?.
a?.let {
// not null do something
println(it)
println("not null")
}
Można go używać w połączeniu z operatorem Elvisa.
Elvis operator ?:
(zgaduję, ponieważ znak przesłuchań wygląda włosów Elvisa)
a ?: println("null")
A jeśli chcesz uruchomić blok kodu
a ?: run {
println("null")
println("The King has left the building")
}
Łączenie dwóch następujących
a?.let {
println("not null")
println("Wop-bop-a-loom-a-boom-bam-boom")
} ?: run {
println("null")
println("When things go null, don't go with them")
}
mają wyglądać na link: - https://kotlinlang.org /docs/reference/null-safety.html ..............To proste w Kotlin Docs – sushildlh