Когда речь заходит о проверке принадлежности объекта к определенному классу или интерфейсу в 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(...).
Перейти в телеграм, чтобы получить результаты теста



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