Irá null instanceof SomeClass
retornar false
ou jogar um NullPointerException
?
java
nullpointerexception
null
Johan Lübcke
fonte
fonte
Respostas:
Não, uma verificação nula não é necessária antes de usar instanceof.
A expressão
x instanceof SomeClass
éfalse
sex
énull
.Na Especificação da linguagem Java, seção 15.20.2, "Digite operador de comparação de instância" :
Portanto, se o operando for nulo, o resultado será falso.
fonte
try it
porque o comportamento atual não é o mesmo que o comportamento garantido .Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceof
operador do Java fazia parte do Java 1.0, lançado há quase 20 anos. É improvável mudar o comportamento agora de uma maneira que interrompa o código existente, sem alguns benefícios que superem esse enorme custo. Vinte anos atrás, talvez houvesse argumentos para retornar true se o argumento pudesse ser lançado ou lançar uma exceção para um argumento nulo. Mas essas definições teriam exigido verificações nulas separadas.Utilizando uma referência nula como o primeiro operando a
instanceof
retornarfalse
.fonte
Muito boa pergunta, de fato. Eu apenas tentei por mim mesmo.
Impressões
JLS / 15.20.2. Operador de comparação de tipo instanceof
API / classe # isInstance (Object)
fonte
s
é apenas uma variável de referência de objeto. Ele pode se referir a um objeto realmente existente (""
) ou a umanull
referência literal (a) .null
não são dados de string, não importa qual variável esteja apontando para ele.s instanceof String
não é o mesmo quefield.getType().equals(String.class)
, por exemplo.s instanceof String
os valoress
são substituídos pelo valor real, para que se tornem"" instanceof String
enull instanceof String
. Pensar assim pode fazer mais sentido.Não, não é.
instanceof
retornariafalse
se seu primeiro operando fornull
.fonte
Assim como um petisco :
Mesmo vai voltar .
(
((A)null)
instanceof A)
false
(Se a
null
impressão tipográfica parecer surpreendente, às vezes você precisará fazer isso, por exemplo, em situações como esta:O mesmo
Test.test((A)null)
será impressoa instanceof A: false
.)PS: Se você estiver contratando, não use isso como uma pergunta de entrevista de emprego. : D
fonte
Não . O literal Java
null
não é uma instância de nenhuma classe. Portanto, não pode ser uma instância de nenhuma classe.instanceof
retornará umfalse
ou,true
portanto, o<referenceVariable> instanceof <SomeClass>
retornofalse
quando oreferenceVariable
valor for nulo.fonte
O
instanceof
operador não precisa denull
verificações explícitas , pois não lança aNullPointerException
se o operando estivernull
.No tempo de execução, o resultado do
instanceof
operador é verdadeiro se o valor da expressão relacional não fornull
e a referência puder ser convertida para o tipo de referência sem gerar uma exceção de conversão de classe.Se o operando for
null
, oinstanceof
operador retornaráfalse
e, portanto, verificações nulas explícitas não serão necessárias.Considere o exemplo abaixo,
O uso correto de
instanceof
é como mostrado abaixo,fonte