Esta es la solución más válida que encomtrarás dar, sin embargo obsérvala pausadamente y valora si se adapta a tu proyecto.
Solución:
Es null una instancia de algo?
No, no hay ningún tipo que null
es un instanceof
.
15.20.2 Operador de comparación de tipos instanceof
RelationalExpression: RelationalExpression instanceof ReferenceType
En tiempo de ejecución, el resultado de la
instanceof
el operador estrue
si el valor del Expresión relacional no esnull
y la referencia podría lanzarse a la Tipo de referencia sin levantar unClassCastException
. De lo contrario, el resultado esfalse
.
Esto significa que para cualquier tipo E
y R
, para cualquier E o
, dónde o == null
, o instanceof R
es siempre false
.
¿Qué conjunto hace?null’ ¿pertenece a?
JLS 4.1 Los tipos de tipos y valores
También hay un especial null type, el tipo de expresión
null
, que no tiene nombre. Porque el null tipo no tiene nombre, es imposible declarar una variable de la null escribir o lanzar a la null escribe. losnull
referencia es el único valor posible de una expresión de null escribe. losnull
la referencia siempre se puede convertir a cualquier tipo de referencia. En la práctica, el programador puede ignorar la null escribe y finge quenull
es simplemente un literal especial que puede ser de cualquier tipo de referencia.
Que es null?
Como dice la cita de JLS anterior, en la práctica puede simplemente pretender que es “simplemente un literal especial que puede ser de cualquier tipo de referencia”.
En Java, null == null
(este no es siempre el caso en otros idiomas). Tenga en cuenta también que por contrato, también tiene esta propiedad especial (desde java.lang.Object
):
public boolean equals(Object obj)
Para cualquier no
null
valor de referenciax
,x.equals(null)
deberíanreturn false
.
También es el valor por defecto (para variables que las tengan) para todos los tipos de referencia:
JLS 4.12.5 Valores iniciales de variables
- Cada variable de clase, variable de instancia o array El componente se inicializa con un valor por defecto cuando se crea:
- Para todos los tipos de referencia, el valor predeterminado es
null
.
La forma en que se usa varía. Puede usarlo para habilitar lo que se llama inicialización perezosa de campos, donde un campo tendría su valor inicial de null
hasta que se use realmente, donde se reemplaza por el valor “real” (que puede ser costoso de calcular).
También hay otros usos. Tomemos un ejemplo real de java.lang.System
:
public static Console console()
Devoluciones: La consola del sistema, si la hay, de lo contrario
null
.
Este es un patrón de uso muy común: null
se utiliza para denotar la inexistencia de un objeto.
Aquí hay otro ejemplo de uso, esta vez de java.io.BufferedReader
:
public String readLine() throws IOException
Devoluciones: A
String
que contenga el contenido de la línea, sin incluir ningún carácter de terminación de línea, onull
si se ha llegado al final de la secuencia.
Así que aquí readLine()
volvería instanceof String
para cada línea, hasta que finalmente devuelve un null
para significar el final. Esto le permite procesar cada línea de la siguiente manera:
String line;
while ((line = reader.readLine()) != null)
process(line);
Se puede diseñar la API para que la condición de terminación no dependa de readLine()
regresando null
, pero se puede ver que este diseño tiene la ventaja de hacer las cosas concisas. Tenga en cuenta que no hay ningún problema con las líneas vacías, porque una línea vacía "" != null
.
Tomemos otro ejemplo, esta vez de java.util.Map
:
V get(Object key)
Devuelve el valor al que se especifica key está mapeado, o
null
si este mapa no contiene ningún mapeo para el key.Si este mapa lo permite
null
valores, luego un valor de retorno denull
no necesariamente indica que el mapa no contiene ningún mapeo para el key; También es posible que el mapa mapee explícitamente el key paranull
. loscontainsKey
La operación se puede utilizar para distinguir estos dos casos.
Aquí comenzamos a ver cómo usar null
puede complicar las cosas. La primera afirmación dice que si el key no está mapeado, null
es regresado. La segunda afirmación dice que incluso si el key está mapeado, null
pueden además ser devueltos.
A diferencia de, java.util.Hashtable
mantiene las cosas más simples al no permitir null
keys y valores; su V get(Object key)
, si regresa null
, significa inequívocamente que el key no está mapeado.
Puede leer el resto de las API y encontrar dónde y cómo null
se utiliza. Tenga en cuenta que no siempre son los mejores prácticas ejemplos.
Generalmente hablando, null
se utilizan como un valor especial para significar:
- Estado no inicializado
- Condición de terminación
- Objeto inexistente
- Un valor desconocido
¿Cómo se representa en la memoria?
¿En Java? Nada de tu incumbencia. Y es mejor mantenerlo así.
Es null
¿una cosa buena?
Esto es ahora casi subjetivo. Algunas personas dicen que null
provoca muchos errores del programador que podrían haberse evitado. Algunos dicen que en un idioma que atrapa NullPointerException
como Java, es bueno usarlo porque fallará rápidamente en los errores del programador. Algunas personas evitan null
mediante el uso de patrón de objeto nulo, etc.
Este es un tema enorme en sí mismo, por lo que es mejor discutirlo como respuesta a otra pregunta.
Terminaré esto con una cita del inventor de null
él mismo, CAR Hoare (de fama rápida):
Yo lo llamo mi error de mil millones de dólares. Fue la invención de la
null
referencia en 1965. En ese momento, estaba diseñando el primer sistema de tipos completo para referencias en un lenguaje orientado a objetos (ALGOL W). Mi objetivo era garantizar que todo uso de referencias fuera absolutamente seguro, y que el compilador las verificara automáticamente. Pero no pude resistir la tentación de poner unnull
referencia, simplemente porque era muy fácil de implementar. Esto ha llevado a innumerables errores, vulnerabilidades y caídas del sistema, que probablemente han causado mil millones de dólares en dolor y daño en los últimos cuarenta años.
El video de esta presentación es más profundo; es un reloj recomendado.
Es null una instancia de algo?
No. Por eso null instanceof X
volverá false
para todas las clases X
. (No se deje engañar por el hecho de que puede asignar null
a una variable cuyo tipo es un tipo de objeto. Estrictamente hablando, la asignación implica una conversión de tipo implícita; vea abajo.)
¿Qué conjunto hace?null’ ¿pertenece a?
Es el único miembro de la null tipo, donde el null tipo se define de la siguiente manera:
“También hay un especial null type, el tipo de expresión null, que no tiene nombre. Porque el null tipo no tiene nombre, es imposible declarar una variable de la null escribir o lanzar a la null escribe. los null referencia es el único valor posible de una expresión de null escribe. los null la referencia siempre se puede convertir a cualquier tipo de referencia. En la práctica, el programador puede ignorar la null escribe y finge que null es simplemente un literal especial que puede ser de cualquier tipo de referencia “. JLS 4.1
Que es null?
Véase más arriba. En algunos contextos, null
se utiliza para denotar “ningún objeto” o “desconocido” o “no disponible”, pero estos significados son específicos de la aplicación.
¿Cómo se representa en la memoria?
Eso es específico de la implementación y no podrá ver la representación de null
en un programa Java puro. (Pero null
se representa como una dirección / puntero de máquina cero en la mayoría, si no en todas, las implementaciones de Java).
Que es null?
No es nada.
Es null una instancia de algo?
No, ya que no es nada. No puede ser instancia de nada.
¿Qué conjunto hace null ¿pertenece a?
No hay ningún conjunto
¿Cómo se representa en la memoria?
Si alguna referencia lo apunta como:
Object o=new Object();
En la memoria del montón, algo de espacio asignado al nuevo objeto creado. Y apuntará a ese espacio asignado en la memoria.
Ahora o=null;
Esto significa que ahora o no apuntará a ese espacio de memoria del objeto.
Calificaciones y reseñas
Si conservas algún problema y capacidad de modernizar nuestro enunciado te proponemos ejecutar una glosa y con placer lo observaremos.