В большинстве случаев вы должны использовать оператор instanceof
, чтобы проверить, является ли объект массивом.
Как правило, вы проверяете тип объекта, прежде чем переходить к определенному типу, который известен во время компиляции. Например, возможно, вы написали некоторый код, который может работать с Integer[]
или int[]
. Вы бы хотели охранять свои заклинания с помощью instanceof
:
if (obj instanceof Integer[]) {
Integer[] array = (Integer[]) obj;
/* Use the boxed array */
} else if (obj instanceof int[]) {
int[] array = (int[]) obj;
/* Use the primitive array */
} else ...
На уровне JVM оператор instanceof
преобразуется в определенный "instanceof" байт-код, который оптимизирован в большинстве реализаций JVM.
В более редких случаях вы можете использовать отражение для обхода графа объектов неизвестных типов. В подобных случаях метод isArray()
может быть полезен, потому что вы не знаете тип компонента во время компиляции; вы можете, например, реализовать какой-то механизм сериализации и иметь возможность передавать каждый компонент массива к одному и тому же методу сериализации, независимо от типа.
Существует два особых случая: нулевые ссылки и ссылки на примитивные массивы.
Нулевая ссылка приведет к instanceof
для результата false
, в то время как isArray
выдает NullPointerException
.
Применительно к массиву примитивов instanceof
дает false
, если тип компонента в правом операнде точно не соответствует типу компонента. Напротив, isArray()
вернет true
для любого типа компонента.