Será null instanceof SomeClass
volver false
o 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 SomeClass
esfalse
six
esnull
.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 it
porque el comportamiento actual no es lo mismo que el comportamiento garantizado .Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceof
operador 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
instanceof
retornosfalse
.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
s
es solo una variable de referencia de objeto. Puede hacer referencia a un objeto realmente existente (""
) o puede hacer referencia a (la)null
referencia literal.null
no son datos de cadena, no importa qué variable lo apunte.s instanceof String
no es lo mismo quefield.getType().equals(String.class)
, por ejemplo.s instanceof String
las
es reemplazado con el valor real, por lo que se convertiría en"" instanceof String
ynull instanceof String
. Pensar así puede tener más sentido.No, no es.
instanceof
volveríafalse
si su primer operando esnull
.fuente
Solo como un bocado :
Incluso volveremos .
(
((A)null)
instanceof A)
false
(Si la conversión tipográfica
null
parece 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
null
no es una instancia de ninguna clase. Por lo tanto, no puede ser una instancia de ninguna clase.instanceof
devolverá unofalse
o,true
por lo tanto, los<referenceVariable> instanceof <SomeClass>
retornosfalse
cuando elreferenceVariable
valor sea nulo.fuente
El
instanceof
operador no necesitanull
comprobaciones explícitas , ya que no arroja unNullPointerException
si el operando esnull
.En tiempo de ejecución, el resultado del
instanceof
operador es verdadero si el valor de la expresión relacional no lo esnull
y la referencia podría convertirse al tipo de referencia sin generar una excepción de conversión de clase.Si el operando es
null
, elinstanceof
operador regresafalse
y, por lo tanto, no se requieren comprobaciones nulas explícitas.Considere el siguiente ejemplo,
El uso correcto de
instanceof
es como se muestra a continuación,fuente