Wird null instanceof SomeClass
zurückkehren false
oder ein werfen NullPointerException
?
java
nullpointerexception
null
Johan Lübcke
quelle
quelle
Antworten:
Nein, eine Nullprüfung ist nicht erforderlich, bevor instanceof verwendet wird.
Der Ausdruck
x instanceof SomeClass
istfalse
wennx
istnull
.Aus der Java-Sprachspezifikation, Abschnitt 15.20.2, "Typvergleichsoperatorinstanz von" :
Wenn der Operand also null ist, ist das Ergebnis falsch.
quelle
try it
weil das aktuelle Verhalten nicht mit dem garantierten Verhalten identisch ist .Effective Java
- amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683instanceof
Operator war Teil von Java 1.0, das vor fast 20 Jahren veröffentlicht wurde. Es ist unwahrscheinlich, das Verhalten jetzt so zu ändern, dass der vorhandene Code beschädigt wird, ohne dass ein Vorteil vorliegt, der die enormen Kosten überwiegt. Vor zwanzig Jahren gab es möglicherweise Argumente für die Rückgabe von true, wenn das Argument umgewandelt werden konnte, oder für die Auslösung einer Ausnahme für ein Nullargument. Diese Definitionen hätten jedoch separate Nullprüfungen erforderlich gemacht.Verwenden einer Nullreferenz als ersten Operanden, der
instanceof
zurückgegeben wirdfalse
.quelle
Sehr gute Frage. Ich habe es nur selbst versucht.
Druckt
JLS / 15.20.2. Typvergleich Operator-Instanz von
API / Klasse # isInstance (Objekt)
quelle
s
ist nur eine Objektreferenzvariable. Es kann auf ein tatsächlich vorhandenes Objekt (""
) oder auf eine (die)null
Literalreferenz verweisen.null
sind keine Zeichenfolgendaten, egal welche Variable darauf zeigt.s instanceof String
ist nicht dasselbe wiefield.getType().equals(String.class)
zum Beispiel.s instanceof String
ders
mit dem aktuellen Wert ersetzt wird, so dass würde"" instanceof String
undnull instanceof String
. So darüber nachzudenken kann sinnvoller sein.Nein, ist es nicht.
instanceof
würde zurückkehren,false
wenn sein erster Operand istnull
.quelle
Nur als Leckerbissen :
Auch wird zurückkehren .
(
((A)null)
instanceof A)
false
(Wenn Typografie
null
überraschend erscheint, müssen Sie dies manchmal tun, beispielsweise in Situationen wie diesen:So
Test.test((A)null)
wird gedruckta instanceof A: false
.)PS: Wenn Sie einstellen, verwenden Sie dies bitte nicht als Frage für ein Vorstellungsgespräch. : D.
quelle
Nein . Java-Literal
null
ist keine Instanz einer Klasse. Daher kann es keine Instanz einer Klasse sein.instanceof
gibt entwederfalse
odertrue
daher die<referenceVariable> instanceof <SomeClass>
Rückgabe zurück,false
wenn derreferenceVariable
Wert null ist.quelle
Der
instanceof
Operator benötigt keine explizitennull
Überprüfungen, da er kein a auslöst,NullPointerException
wenn der Operand istnull
.Zur Laufzeit ist das Ergebnis des
instanceof
Operators wahr, wenn der Wert des relationalen Ausdrucks nicht stimmtnull
und die Referenz in den Referenztyp umgewandelt werden kann, ohne eine Klassenumwandlungsausnahme auszulösen.Wenn dies der Operand ist
null
, gibt derinstanceof
Operator zurückfalse
und daher sind keine expliziten Nullprüfungen erforderlich.Betrachten Sie das folgende Beispiel:
Die korrekte Verwendung von
instanceof
ist wie unten gezeigt,quelle