Ответ
Нет, массивы в Java — это не примитивы, а объекты. Они являются объектами специального типа, создаваемыми во время выполнения.
Доказательства того, что массивы — это объекты:
-
Наследование от
Object: Все массивы неявно наследуют классjava.lang.Object.int[] intArray = new int[5]; System.out.println(intArray instanceof Object); // true -
Наличие методов класса
Object: К массиву можно применять методыtoString(),hashCode(),clone().String[] strArray = {"a", "b"}; System.out.println(strArray.toString()); // Вызовется Object.toString() -
Поле
length: Это не метод, а финальное публичное поле, характерное для объектов-массивов.System.out.println(intArray.length); // 5 -
Приведение типов: Массивы участвуют в иерархии ссылочных типов.
Object obj = new int[10]; // Массив может быть присвоен переменной типа Object String[] strings = (String[]) obj; // Возможно приведение (выбросит ClassCastException в этом случае)
Отличия от примитивов:
- Примитивы (
int,charи т.д.) не являются объектами, не имеют методов и не наследуютObject. - Массив хранит свои элементы (примитивы или ссылки) в непрерывной области памяти, но сама переменная массива — это ссылка на этот объект в куче (heap).
Синтаксис создания: new int[5] — ключевое слово new используется для создания объектов, что также подтверждает природу массивов.
Ответ 18+ 🔞
А, ну вот, опять про массивы в Java заговорили! Давайте, блядь, раз и навсегда расставим точки над ё, чтобы потом не было этих ебушки-воробушки с "а я думал, это примитив".
Смотрите сюда, товарищи программисты. Если кто-то вам скажет, что массив в Java — это примитив, вы ему прямо в ебало этим кодом кидайтесь. Это объект, ёпта! Самый настоящий, хоть и со своей спецификой. Создаётся он в рантайме, живёт в куче, как все порядочные объекты.
А вот вам железобетонные доказательства, что это не какая-нибудь хитрая жопа, а полноценный объект:
-
Он от
Objectродился, блядь! Все массивы, хоть целочисленные, хоть строковые, — они неявно от великого и ужасногоjava.lang.Objectпроисходят. Проверяем — не верите?int[] intArray = new int[5]; System.out.println(intArray instanceof Object); // trueВидите?
true! Самinstanceofкричит: "Да, папаша, это твой сын, объектный!" -
Методы
Objectу него работают! Попробуйте к примитивуintвызватьtoString()— получите по ебалу ошибкой компиляции. А с массивом — пожалуйста, вызывается роднойObject.toString().String[] strArray = {"a", "b"}; System.out.println(strArray.toString()); // Вызовется Object.toString()И
hashCode(), иclone()— всё наше, объектное. -
Поле
length— это вам не метод какой-нибудь! Это финальное публичное поле, вишенка на торте объекта-массива. У примитивов полей нет и быть не может, это же просто голые битики.System.out.println(intArray.length); // 5 -
Приведение типов — царь доказательств! Массивы в иерархии ссылочных типов плавают, как рыба в воде. Можете запихнуть массив в переменную типа
Object— и он там будет сидеть, довольный.Object obj = new int[10]; // Массив может быть присвоен переменной типа Object String[] strings = (String[]) obj; // Возможно приведение (выбросит ClassCastException в этом случае)А теперь попробуйте примитив
intвObjectзапихнуть без обёрткиInteger— получите волнение ебать и красные подчёркивания в IDE.
Чем он не похож на примитивы, спросите вы?
Да всем, блядь! Примитив — это тупая, прости господи, величина в стеке. Ни методов, ни папы Object, ни наследников. А массив — это ссылка (переменная), которая тычет пальцем в область в куче, где лежат его элементы (хоть примитивы, хоть другие ссылки). Ключевое слово new при создании — это же священный ритал порождения объекта! new int[5] — что может быть очевиднее?
Так что запомните: массив — объект. Всё, тема закрыта, можно расходиться.