Safe Call (?.): Returns null if the object is null, preventing null pointer exceptions. Not-null Assertion (!!): Converts nullable type to non-nullable, throws exception if null.
val name: String? = getName()
// Safe call - returns null if name is null
val upperCase = name?.uppercase()
// Not-null assertion - throws KotlinNullPointerException if name is null
val definiteUpperCase = name!!.uppercase()
// Chaining safe calls
val result = person?.address?.street?.length
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.