Is null check needed before calling instanceof? Is null check needed before calling instanceof? java java

Is null check needed before calling instanceof?


No, a null check is not needed before using instanceof.

The expression x instanceof SomeClass is false if x is null.

From the Java Language Specification, section 15.20.2, "Type comparison operator instanceof":

"At run time, the result of the instanceof operator is true if the value of the RelationalExpression is not null and the reference could be cast to the ReferenceType without raising a ClassCastException. Otherwise the result is false."

So if the operand is null, the result is false.


Using a null reference as the first operand to instanceof returns false.


Very good question indeed. I just tried for myself.

public class IsInstanceOfTest {    public static void main(final String[] args) {        String s;        s = "";        System.out.println((s instanceof String));        System.out.println(String.class.isInstance(s));        s = null;        System.out.println((s instanceof String));        System.out.println(String.class.isInstance(s));    }}

Prints

truetruefalsefalse

JLS / 15.20.2. Type Comparison Operator instanceof

At run time, the result of the instanceof operator is true if the value of the RelationalExpression is not null and the reference could be cast to the ReferenceType without raising a ClassCastException. Otherwise the result is false.

API / Class#isInstance(Object)

If this Class object represents an interface, this method returns true if the class or any superclass of the specified Object argument implements this interface; it returns false otherwise. If this Class object represents a primitive type, this method returns false.