He estado tratando de descubrir por qué C++ me está volviendo loco escribiendo NULL
. De repente, me golpea el otro día; Estuve escribiendo null
(minúsculas) en Java durante años. Ahora, de repente estoy programando en C++ y ese pequeño pedazo de memoria muscular me está volviendo loco.¿Cuál es la diferencia entre NULL en C++ y null en Java?
Wikiperipatetic define C++ NULL como parte de la stddef:
Una macro que se expande a un puntero nulo constante. Se puede definir como ((void *) 0), 0 o 0L según el compilador y el idioma.
documentos de sol me dice esto acerca de Java "nula literal":
El tipo nulo tiene un valor, la referencia nula , representada por el literal nula, que está formado por ASCII caracteres . Un literal nulo siempre es del tipo nulo.
Todo esto es muy agradable. Sé lo que es una referencia de puntero nulo y gracias por las notas del compilador. Ahora estoy un poco borroso en la idea de un literal en Java, por lo que he leído en ...
Un literal es el código fuente representación de un valor fijo; literales están representados directamente en su código sin requerir el cómputo .
También hay un nulo literal literal que se puede utilizar como un valor para cualquier tipo de referencia . null se puede asignar a cualquier variable, excepto las variables de tipos primitivos. Hay poco que puede hacer con un valor nulo más allá de probando su presencia. Por lo tanto, null se usa a menudo en programas como un marcador para indicar que algún objeto es no disponible.
Bien, entonces creo que lo entiendo ahora. En C++, NULL es una macro que, cuando se compila, se evalúa como la constante de puntero nulo. En Java, null es un valor fijo que cualquier no primitivo puede ser asignado también; ideal para probar en un práctico if statement
.
Java no tiene punteros, por lo que puedo ver por qué mantienen nulo un valor simple en lugar de algo sofisticado. ¿Pero por qué decidió Java cambiar las mayúsculas NULL
a null
?
Además, ¿me falta algo aquí?
"Java no tiene punteros". En realidad, Java * solo * tiene punteros. –
Excepto para los tipos básicos =) –
'((void *) 0)' no es una definición válida de 'NULL' en C++. –