Разработчик GWT очень хорош и допускает быструю разработку веб-сайтов GWT. ( http://www.instantiations.com/gwtdesigner/ )
Ответ состоит из двух половин:
Второй момент - почему ответ на ваш вопрос: «Но разве это не место в памяти?» "Нет" - это просто правило, согласно которому ноль не считается допустимой ячейкой памяти. Попытка получить к нему доступ вызовет исключение.
Редактировать: Согласно Википедии (так что это должно быть правдой 8-) «некоторые архитектуры используют подписанное адресное пространство и используют самое отрицательное значение». Таким образом, оно не обязательно равно нулю для всех архитектур, но какое бы значение оно ни было в данной архитектуре, это значение считается недопустимым местом в памяти.
В .NET нулевые значения представлены битовой комбинацией «все нули».
Это важно, поскольку это означает, что правильное создание нового массива или объекта требует только очистки памяти чтобы создать соответствующие значения по умолчанию для всех полей, прежде чем начинать вызывать конструкторы, инициализаторы переменных и т. д., где это необходимо.
(Я пытался найти, где это указано, и пока у меня не получается ... но это единственный имеет смысл. Я буду искать.)
Исходя из опыта работы с C ++, стандартное определение NULL при разговоре об указателях равно 0. Я предполагаю, что другие языки работают аналогичным образом.
Для ответа на C #
CLR имеет код операции для null.
String s = "ff";
s = null;
генерирует этот IL
.locals init ([0] string s)
IL_0000: nop
IL_0001: ldstr "ff"
IL_0006: stloc.0
IL_0007: ldnull
IL_0008: stloc.0
, как вы можете видеть, существует код операции ldnull, который обрабатывает специальное значение null
Не все языки используют конкретное значение, иногда null является объектом. В динамических языках часто есть глобальный объект, представляющий null, на который устанавливаются ссылки на объекты, когда они не имеют значения. В этих случаях для нулевого объекта могут быть выполнены вызовы методов и созданы соответствующие ответы.
Например, в Ruby есть синглтон с именем nil и общие методы, такие как or, nil? и to_s все имеют соответствующие реализации по умолчанию, которые можно было бы ожидать, если бы они были вызваны для нулевого объекта.
В Java null полностью указывается в спецификации виртуальной машины. Его фактическое значение на самом деле не указано, а скорее то, что должно произойти, когда инструкция байтового кода его увидит.
Null обычно "обрабатывается" установкой ссылки на объект, указывающей на объект nil.
Как компьютер сообщает, что ссылка содержит ноль вместо ссылки на объект?
Согласно Википедии , нулевой указатель на некоторых языках может быть фиксированный адрес в памяти, к которому пользовательские программы могут не иметь доступа, поэтому, если какой-либо объект указывает на этот адрес, он равен нулю, в противном случае - нет.
Первая страница ОЗУ обычно защищена от программ пользовательского пространства. Таким образом, если программист забудет проверить нулевой указатель, программа, по крайней мере, вызовет ошибку страницы, когда программа попытается получить доступ к этому местоположению.
Так что, хотя [0x00000000]
, технически является реальная ячейка памяти, большинство программ не могут получить к ней доступ.
Процессоры x86
имеют там специальную таблицу, если я правильно помню.
http://googleit1st.com/search?hl=en&q=null+pointer
Нулевой указатель или пустая ссылка Null - это специальное значение указателя (или другой вид ссылки на объект), используемое для обозначения того, что указатель намеренно не указывает (или не ссылается) на объект. Такой указатель называется нулевым указателем. 1 Многие реализации используют значение 0 (все нулевые биты) для представления нулевого указателя, поскольку он находится в нижней части адресного пространства большинства процессоров (хотя некоторые архитектуры используют подписанное адресное пространство и используют самое отрицательное значение). Многие операционные системы генерируют исключение при попытке доступа к этому адресу памяти. Некоторые языки используют другую номенклатуру для такого указателя, например, Pascal, Ruby и Lua используют nil 2 , Visual Basic использует Nothing, а Python использует None. Фортран считает значение null не константой, а свойством, которое может быть установлено директивой NULLIFY и проверено функцией ASSOCIATED. Взято из википедии