A parità strutturale a == b
viene tradotto
a?.equals(b) ?: (b === null)
Pertanto quando si confrontano al null
, l'uguaglianza strutturale a == null
è tradotto in un'uguaglianza referenziale a === null
.
Secondo il docs, non v'è alcun punto in ottimizzazione del codice, in modo da poter usare a == null
e a != null
Nota che se la variabile è una proprietà mutevole, non sarà in grado di intelligente trasmetterlo al suo tipo non annullabile all'interno dell'istruzione if
(poiché il valore potrebbe essere stato modificato da un altro thread) e dovresti invece utilizzare l'operatore di chiamata sicura con let
.
operatore di call sicuro?.
a?.let {
// not null do something
println(it)
println("not null")
}
Si può usare in combinazione con l'operatore di Elvis.
Elvis operatore ?:
(sto cercando di indovinare perché il punto interrogativo si presenta come capelli di Elvis')
a ?: println("null")
E se si desidera eseguire un blocco di codice
a ?: run {
println("null")
println("The King has left the building")
}
Combinazione dei due
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")
}
fonte
2016-05-14 21:48:54
hanno guardare sul link: - https://kotlinlang.org /docs/reference/null-safety.html ..............È facile con Kotlin Docs – sushildlh