Что такое null (None)?
Допустим у меня есть некое a
равное null. С точки зрения памяти, что такое a
?
Ссылка на некий null
? Просто пустое значение без ссылки? Ссылка на пустую ячейку памяти?
Различается ли реализация null
(None
) в разных языках, и если да, как?
Ответы (2 шт):
Не нул - это ссылка на объект. Нул - это нет ссылки на объект. Обычно в переменную записывают 0, который и означает нул. null, None, Nothing - одно и то же, но реализация может быть разная. В принципе, любле значение, или диапазон значений, который, по договорённости, и означает нул.
Конечно, в разных языках реализации могут и будут различаться. Чем больше похожи языки друг на друга, тем ближе могут быть реализации.
Основная концепция в том, что null
, None
, NULL
, nullptr
и т.д. используются для индикации несуществующего объекта.
Обычно где-то внутри это просто превращается в целочисленный нуль или нулевой адрес.
В C# null
- значение по умолчанию для ссылочных типов данных. Типы значений не могут быть null
, но их можно обернуть в Nullable
для нужного эффекта.
В Python None
представляется собой отдельный тип NoneType
.
В C NULL
является макросом и обычно просто соответствует целому числу 0
. Хотя с C23 появился отдельный тип nullptr_t
и значение nullptr
почти как в С++, начиная с C++11.