Будет ли null instanceof SomeClass возвращать false или выбросить NullPointerException?
Нужна ли нулевая проверка перед вызовом instanceof?
Ответ 1
Нет, нулевая проверка не требуется перед использованием instanceof.
 Выражение x instanceof SomeClass имеет значение false если x равно null.
Из спецификации языка Java, раздел 15.20.2, "Оператор сравнения типов instanceof":
"Во время выполнения результат оператора
instanceofравенtrueесли значение RelationalExpression не равноnullи ссылка может быть приведена к ReferenceType без повышенияClassCastException. В противном случае результат равенfalse".
Так что, если операнд нулевой, результат ложный.
Ответ 2
 Использование нулевой ссылки в качестве первого операнда для instanceof возвращает false.
Ответ 3
Очень хороший вопрос. Я просто пробовал для себя.
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));
    }
}
Печать
true
true
false
false
JLS/15.20.2. Тип сравнения Оператор instanceof
Во время выполнения результат оператора
instanceofравенtrue, если значение RelationalExpression не равноnull, и ссылка может быть передана в ReferenceType без повышенияClassCastException. В противном случае результатfalse.
API/Class # isInstance (Object)
Если этот объект
Classпредставляет интерфейс, этот метод возвращаетtrue, если класс или любой суперкласс указанного аргументаObjectреализует этот интерфейс; он возвращаетfalseв противном случае. Если этот объектClassпредставляет примитивный тип, этот метод возвращаетfalse.
Ответ 4
Нет, нет. instanceof вернет false, если его первый операнд null.
Ответ 5
 Нет Java буквальный null не является экземпляром какого-либо класса. Поэтому он не может быть экземпляром какого-либо класса. instanceof вернет либо false либо true поэтому <referenceVariable> instanceof <SomeClass> возвращает false если значение referenceVariable равно нулю.
Ответ 6
Просто как лакомый кусочек:
 Even (  ((A)null) instanceof A) вернет false.
 (Если приведение типов к null кажется неожиданным, иногда вам приходится это делать, например, в таких ситуациях:
public class Test
{
  public static void test(A a)
  {
    System.out.println("a instanceof A: " + (a instanceof A));
  }
  public static void test(B b) {
    // Overloaded version. Would cause reference ambiguity (compile error)
    // if Test.test(null) was called without casting.
    // So you need to call Test.test((A)null) or Test.test((B)null).
  }
}
 Поэтому Test.test((A)null) выведет a instanceof A: false.)
PS: Если вы нанимаете, пожалуйста, не используйте это как вопрос собеседования. : D
Ответ 7
Оператор instanceof не нуждается в явных проверках null, так как он не бросает NullPointerException, если операнд null.
Во время выполнения результат оператора instanceof является истинным, если значение реляционного выражения не является null, и ссылка может быть передана в ссылочный тип без повышения исключения исключения класса.
Если операнд null, оператор instanceof возвращает false и, следовательно, явные проверки null не требуются.
Рассмотрим приведенный ниже пример,
public static void main(String[] args) {
         if(lista != null && lista instanceof ArrayList) {                     //Violation
                System.out.println("In if block");
         }
         else {
                System.out.println("In else block");
         }
}
Правильное использование instanceof показано ниже,
public static void main(String[] args) {
      
         if(lista instanceof ArrayList){                     //Correct way
                  System.out.println("In if block");
         }
            else {
                 System.out.println("In else block");
         }  
}
