Será null instanceof SomeClassvolver falseo lanzar una NullPointerException?
java
nullpointerexception
null
Johan Lübcke
fuente
fuente

Respuestas:
No, no es necesaria una verificación nula antes de usar instanceof.
La expresión
x instanceof SomeClassesfalsesixesnull.De la Especificación del lenguaje Java, sección 15.20.2, "Operador de comparación de tipos instanceof" :
Entonces, si el operando es nulo, el resultado es falso.
fuente
try itporque el comportamiento actual no es lo mismo que el comportamiento garantizado .Effective Java- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceofoperador de Java era parte de Java 1.0, lanzado hace casi 20 años. Cambiar el comportamiento ahora de una manera que rompería el código existente es poco probable, a falta de algún beneficio que supere ese enorme costo. Hace veinte años, tal vez podría haber argumentos para devolver verdadero si el argumento pudiera ser lanzado, o lanzar una excepción para un argumento nulo. Pero esas definiciones habrían requerido verificaciones nulas separadas.Usando una referencia nula como el primer operando para
instanceofretornosfalse.fuente
Muy buena pregunta de hecho. Solo lo intenté por mí mismo.
Huellas dactilares
JLS / 15.20.2. Operador de comparación de tipos instanceof
API / Class # isInstance (Object)
fuente
ses solo una variable de referencia de objeto. Puede hacer referencia a un objeto realmente existente ("") o puede hacer referencia a (la)nullreferencia literal.nullno son datos de cadena, no importa qué variable lo apunte.s instanceof Stringno es lo mismo quefield.getType().equals(String.class), por ejemplo.s instanceof Stringlases reemplazado con el valor real, por lo que se convertiría en"" instanceof Stringynull instanceof String. Pensar así puede tener más sentido.No, no es.
instanceofvolveríafalsesi su primer operando esnull.fuente
Solo como un bocado :
Incluso volveremos .
(((A)null)instanceof A)false(Si la conversión tipográfica
nullparece sorprendente, a veces hay que hacerlo, por ejemplo en situaciones como esta:Entonces
Test.test((A)null)imprimiráa instanceof A: false.)PD: Si está contratando, no use esto como una pregunta de entrevista de trabajo. :RE
fuente
No se . El literal de Java
nullno es una instancia de ninguna clase. Por lo tanto, no puede ser una instancia de ninguna clase.instanceofdevolverá unofalseo,truepor lo tanto, los<referenceVariable> instanceof <SomeClass>retornosfalsecuando elreferenceVariablevalor sea nulo.fuente
El
instanceofoperador no necesitanullcomprobaciones explícitas , ya que no arroja unNullPointerExceptionsi el operando esnull.En tiempo de ejecución, el resultado del
instanceofoperador es verdadero si el valor de la expresión relacional no lo esnully la referencia podría convertirse al tipo de referencia sin generar una excepción de conversión de clase.Si el operando es
null, elinstanceofoperador regresafalsey, por lo tanto, no se requieren comprobaciones nulas explícitas.Considere el siguiente ejemplo,
El uso correcto de
instanceofes como se muestra a continuación,fuente