Является ли массив в Java объектом?

«Является ли массив в Java объектом?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да. Массивы в Java — это полноценные объекты, которые:

  1. Создаются оператором new (или с помощью специального синтаксиса инициализации).
  2. Наследуются от класса java.lang.Object.
  3. Имеют все методы класса Object (toString(), equals(), hashCode(), getClass()).
  4. Могут быть присвоены переменной типа Object.

Доказательство и примеры:

int[] numbers = new int[3];
String[] words = {"Hello", "World"};

// 1. Наследование от Object
System.out.println(numbers instanceof Object); // true

// 2. Использование методов Object
System.out.println(words.toString()); // Вызовется Object.toString()
System.out.println(words.getClass()); // class [Ljava.lang.String;

// 3. Присваивание ссылке типа Object
Object obj = numbers; // Корректно

// 4. Специфичное для массивов поле 'length' (не метод!)
System.out.println(numbers.length); // 3

Важные особенности массивов как объектов:

  • Ковариантность типов: Если Child — подкласс Parent, то Child[] является подтипом Parent[]. Это может приводить к ArrayStoreException во время выполнения.
  • Специальный синтаксис: Поддерживают сокращенную инициализацию {элементы}.
  • Класс: Имя класса массива имеет специальный формат, например, [I для int[] или [Ljava.lang.String; для String[].