Являются ли массивы в Java примитивным типом данных?

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

Ответ

Нет, массивы в Java — это не примитивы, а объекты. Они являются объектами специального типа, создаваемыми во время выполнения.

Доказательства того, что массивы — это объекты:

  1. Наследование от Object: Все массивы неявно наследуют класс java.lang.Object.

    int[] intArray = new int[5];
    System.out.println(intArray instanceof Object); // true
  2. Наличие методов класса Object: К массиву можно применять методы toString(), hashCode(), clone().

    String[] strArray = {"a", "b"};
    System.out.println(strArray.toString()); // Вызовется Object.toString()
  3. Поле length: Это не метод, а финальное публичное поле, характерное для объектов-массивов.

    System.out.println(intArray.length); // 5
  4. Приведение типов: Массивы участвуют в иерархии ссылочных типов.

    Object obj = new int[10]; // Массив может быть присвоен переменной типа Object
    String[] strings = (String[]) obj; // Возможно приведение (выбросит ClassCastException в этом случае)

Отличия от примитивов:

  • Примитивы (int, char и т.д.) не являются объектами, не имеют методов и не наследуют Object.
  • Массив хранит свои элементы (примитивы или ссылки) в непрерывной области памяти, но сама переменная массива — это ссылка на этот объект в куче (heap).

Синтаксис создания: new int[5] — ключевое слово new используется для создания объектов, что также подтверждает природу массивов.