Я пытался выяснить, почему C++ делает меня сумасшедшим, набрав NULL
. Внезапно он бьет меня на днях; Я уже много лет набираю null
(нижний регистр) на Java. Теперь я начинаю программировать на C++, и этот маленький кусок мышечной памяти делает меня сумасшедшим.В чем разница между NULL в C++ и null в Java?
Wikiperipatetic определяет C++ NULL как часть stddef:
макрокоманды, которая расширяется к нулевой константе указателя . Он может быть определен как ((void *) 0), 0 или 0L в зависимости от компилятора и языка.
документы Sun говорит мне это о Java в «нулевой буквальным»:
Нулевой тип имеет одно значение, нулевая ссылку, представленную буквального нулем, которая формируется из ASCII символов , Нулевой литерал всегда равен нулевого типа.
Так что это все очень приятно. Я знаю, что такое ссылка на нулевой указатель, и благодарю вас за комментарии к компилятору. Теперь я немного нечеткой на идее буквальным в Java, так что я читать ...
Буквальное исходный код представление фиксированного значения; литералы представлены непосредственно в ваш код, не требуя вычислений.
Существует также специальный пустой литерал , который может использоваться как значение для любого ссылочного типа . null может быть назначено для любой переменной, кроме переменных из примитивных типов. Мало что вам может сделать с нулевым значением за пределами тестирования на его присутствие. Поэтому null часто используется в программах как маркер , чтобы указать, что у какого-либо объекта недоступно.
Итак, я думаю, что я понял. В C++ NULL - это макрос, который при компиляции вычисляет константу нулевого указателя. В Java значение null является фиксированным значением, которое может быть присвоено любому не примитиву; отлично подходит для тестирования в удобном режиме if statement
.
В Java нет указателей, поэтому я могу понять, почему они сохранили нулевое значение, а не что-то интересное. Но почему я решил изменить все колпачки NULL
на null
?
Кроме того, я что-то пропустил здесь?
«Java не имеет указателей». На самом деле Java * only * имеет указатели. –
За исключением базовых типов =) –
'((void *) 0)' не является допустимым определением 'NULL' в C++. –