Null-safety в Kotlin разделяет типы на nullable (T?) и non-null (T), чтобы NPE ловились на этапе компиляции, а не в рантайме на устройстве.
Разбор
String не может быть null; String? — может.
- Операторы
?., ?:, !! и smart cast после проверок.
- Цель — меньше крашей в Android от «забыли проверить null».
!! оставляет NPE возможным — используйте осознанно.
Пример
fun len(s: String?): Int = s?.length ?: 0
Итог
Null-safety — базовый контракт Kotlin: отсутствие значения явно в типе.