Java isassignablefrom vs instanceof

Различия между instanceof и Class.isAssignableFrom(…)

Когда речь заходит о проверке принадлежности объекта к определенному классу или интерфейсу в Java, можно использовать два метода: instanceof и Class.isAssignableFrom(…).

Когда речь заходит о проверке принадлежности объекта к определенному классу или интерфейсу в Java, можно использовать два метода: instanceof и Class.isAssignableFrom(. ) . Оба этих оператора используются для определения того, является ли объект экземпляром определенного класса или интерфейса. Но в чем же разница между ними?

Возьмем для примера следующий код:

Object a = new String("example"); boolean result = a instanceof String;
Object a = new String("example"); boolean result = String.class.isAssignableFrom(a.getClass());

В обоих случаях результат будет true , поскольку a действительно является экземпляром класса String .

Однако существуют различия в поведении этих двух операторов. Главное различие заключается в том, как они обрабатывают null значения.

Оператор instanceof возвращает false , если его левый операнд null . Это означает, что следующий код:

Object a = null; boolean result = a instanceof String;

вернет false , поскольку a равно null .

С другой стороны, метод Class.isAssignableFrom(. ) выбросит исключение NullPointerException , если ему передать null значение. Таким образом, следующий код:

Object a = null; boolean result = String.class.isAssignableFrom(a.getClass());

выбросит исключение NullPointerException , поскольку a.getClass() возвращает null .

Таким образом, в то время как instanceof безопасен для использования с null значениями, Class.isAssignableFrom(. ) требует предварительной проверки на null для избежания исключений. Это основное различие между instanceof и Class.isAssignableFrom(. ) .

Источник

Читайте также:  Python django admin templates
Оцените статью