Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
16 Сен 2024
2 мин
313

Различия между 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(...).

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий