Во всех современных языках программирования есть такое понятие, как NullPointer или просто Null.
По умолчанию все объекты в Котлин не нулабельные т.е не могут содержать значение null.
Ключевое слово null представляет специальный литерал, который указывает, что переменная не имеет как такового значения. То есть у нее по сути отсутствует значение.
Подобное значение может быть полезно в ряде ситуациях, когда необходимо использовать данные, но при этом точно неизвестно, а есть ли в реальности эти данные.
Например, мы получаем данные по сети, данные могут прийти или не прийти. Либо может быть ситуация, когда нам надо явным образом указать, что данные не установлены.
Однако переменным стандартных типов, например, типа Int или String или любых других классов, мы не можем просто взять и присвоить значение null:
Чтобы превратить обычный тип в тип nullable, достаточно поставить после названия типа вопросительный знак:
При этом мы можем передавать переменным nullable-типов как значение null, так и конкретные значения, которые укладываются в диапазон значений данного типа.
Например, у строк есть свойство length, которое возвращает длину строки в символах.
Что бы вывести длину строки мы можем применить оператор ?
Получаем вывод 5 т.к в строке Hello имеется 5 символов. С помощью оператора ? подобным образом можно обращаться к любым свойствам и функциям объекта.