Est-ce que null instanceof SomeClass
retourner false
ou de jeter un NullPointerException
?
java
nullpointerexception
null
Johan Lübcke
la source
la source
Réponses:
Non, une vérification nulle n'est pas nécessaire avant d'utiliser instanceof.
L'expression
x instanceof SomeClass
estfalse
six
estnull
.Dans la spécification du langage Java, section 15.20.2, «Opérateur de comparaison de type instanceof» :
Donc, si l'opérande est nul, le résultat est faux.
la source
try it
parce que le comportement actuel n'est pas le même que le comportement garanti .Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceof
opérateur de Java faisait partie de Java 1.0, sorti il y a près de 20 ans. Il est peu probable de changer le comportement d'une manière qui briserait le code existant, en l'absence d'un avantage qui l'emporte sur cet énorme coût. Il y a vingt ans, il aurait peut-être pu y avoir des arguments pour renvoyer true si l'argument pouvait être casté, ou lever une exception pour un argument nul. Mais ces définitions auraient nécessité des vérifications nulles distinctes.Utilisation d'une référence nulle comme premier opérande à
instanceof
renvoyerfalse
.la source
Très bonne question en effet. J'ai juste essayé pour moi.
Impressions
JLS / 15.20.2. Opérateur de comparaison de type instanceof
API / classe # isInstance (objet)
la source
s
n'est qu'une variable de référence d'objet. Il peut faire référence à un objet réellement existant (""
) ou à unenull
référence littérale.null
n'est pas une donnée de chaîne, quelle que soit la variable qui la pointe.s instanceof String
n'est pas le même quefield.getType().equals(String.class)
, par exemple.s instanceof String
les
est remplacé par la valeur réelle, ce qui deviendrait"" instanceof String
etnull instanceof String
. Penser à cela comme cela peut avoir plus de sens.Non ce n'est pas.
instanceof
retourneraitfalse
si son premier opérande estnull
.la source
Tout comme une friandise :
Même reviendra .
(
((A)null)
instanceof A)
false
(Si le transtypage
null
semble surprenant, vous devez parfois le faire, par exemple dans des situations comme celle-ci:Ainsi
Test.test((A)null)
imprimeraa instanceof A: false
.)PS: Si vous embauchez, veuillez ne pas l'utiliser comme une question d'entretien d'embauche. :RÉ
la source
Non . Le littéral Java
null
n'est une instance d'aucune classe. Par conséquent, il ne peut être une instance d' aucune classe.instanceof
retournera soitfalse
outrue
donc les<referenceVariable> instanceof <SomeClass>
retoursfalse
lorsque lareferenceVariable
valeur est nulle.la source
L'
instanceof
opérateur n'a pas besoin denull
vérifications explicites , car il ne lance pas de aNullPointerException
si l'opérande l'estnull
.Au moment de l'exécution, le résultat de l'
instanceof
opérateur est vrai si la valeur de l'expression relationnelle ne l'est pasnull
et que la référence peut être convertie en type de référence sans déclencher une exception de conversion de classe.Si l'opérande l'est
null
, l'instanceof
opérateur retournefalse
et par conséquent, des vérifications null explicites ne sont pas requises.Considérez l'exemple ci-dessous,
L'utilisation correcte de
instanceof
est comme indiqué ci-dessous,la source