Saltar al contenido

Que es null en Java?

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 es true si el valor del Expresión relacional no es null y la referencia podría lanzarse a la Tipo de referencia sin levantar un ClassCastException. De lo contrario, el resultado es false.

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. 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.


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 nonull valor de referencia x, x.equals(null) deberían return 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, o null 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 de null 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 para null. los containsKey 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 un null 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *