tutorial - java swing text




Нужно ли проверять нуль перед вызовом instanceof? (5)

Использование нулевой ссылки в качестве первого операнда instanceof возвращает false .

Будет ли null instanceof SomeClass возвращать false или null instanceof SomeClass NullPointerException ?


Нет, нужная проверка не требуется перед использованием instanceof.

Выражение x instanceof SomeClass является false если x равно null .

Из спецификации языка Java, раздел 15.2.2, «Оператор сравнения типов» :

«Во время выполнения результат оператора instanceof равен true если значение RelationalExpression не является null и ссылка может быть ClassCastException в ReferenceType без повышения ClassCastException иначе результат будет false ».

Поэтому, если операнд имеет значение null, результат будет ложным.


Оператор 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");
         }  
}

Очень хороший вопрос. Я просто пробовал для себя.

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 и ссылка может быть ClassCastException в ReferenceType без повышения ClassCastException . В противном случае результат будет false .

API / класс # isInstance (Object)

Если этот объект Class представляет собой интерфейс, этот метод возвращает true если класс или любой суперкласс указанного аргумента Object реализует этот интерфейс; он возвращает false противном случае. Если этот объект Class представляет примитивный тип, этот метод возвращает false .


Нет . Java literal null не является экземпляром какого-либо класса. Поэтому он не может быть экземпляром любого класса. instanceof вернет либо false либо true поэтому <referenceVariable> instanceof <SomeClass> возвращает false когда значение referenceVariable равно null.







null