Я пытался понять, почему С++ делает меня сумасшедшим, набрав NULL
. Внезапно он бьет меня на днях; Я уже много лет набираю NULL
(нижний регистр) на Java. Теперь я внезапно программирую на С++, и этот маленький кусок мышечной памяти делает меня сумасшедшим.
Wikiperipatetic определяет С++ NULL как часть stddef:
Макрос, который расширяется до нулевого указателя постоянная. Его можно определить как ((void *) 0), 0 или 0L в зависимости от компилятор и язык.
Документы Sun говорят мне о Java "нулевой литерал":
Тип null имеет одно значение, значение null ссылка, представленная буквальным null, который формируется из ASCII персонажи. Нулевой литерал всегда нулевого типа.
Так что все это очень приятно. Я знаю, что такое ссылка на нулевой указатель, и благодарю вас за комментарии к компилятору. Теперь я немного расплывчатый в идее литерала на Java, поэтому я читаю...
Литерал - это исходный код представление фиксированного значения; литералы представлены непосредственно в ваш код, не требуя вычисление.
Также имеется специальный нулевой литерал который может использоваться как ценность для любого ссылочный тип. null может быть присвоен к любой переменной, кроме переменных примитивных типов. Там тебя мало может иметь нулевое значение за пределами тестирование на его присутствие. Следовательно, null часто используется в программах как чтобы указать, что какой-либо объект недоступен.
Хорошо, поэтому я думаю, что я понял это сейчас. В С++ NULL - это макрос, который при компиляции вычисляет константу нулевого указателя. В Java значение null является фиксированным значением, которое может быть присвоено любому не примитиву; отлично подходит для тестирования в удобном if statement
.
Java не имеет указателей, поэтому я могу понять, почему они сохранили нулевое значение, а не что-то интересное. Но почему Java решил изменить все кепки NULL
на NULL
?
Кроме того, я что-то пропустил здесь?