2015-05-11 4 views
1

Я немного новичок в программировании на Java. Два или три дня назад я столкнулся с вопросом о массивах в моем сознании, которые приводятся ниже.Как Array обрабатывает примитивные типы данных как объекты?

Каждый Java-программист знает, что массив представляет собой набор объектов, неважно, содержит ли он примитивные типы данных или строки.

Так что мой вопрос, если массив представляет собой набор объектов, так как это делает лечит или преобразует примитивного типа данных в объектов, потому что в Java, примитивный тип данных отличаются от объектов (например, строки) , Рассмотрим следующую программу: -

int[] Array = new int[3]; 
    Array[0] = 1; 
    Array[1] = 2; 
    Array[2] = 4;` 
    for(int a=0;a<Array.length;a++) System.out.println(Array[a]); 

Я сделал массив или массив объектов с использованием нового ключевого слова и тип данных следует за ним. Это, конечно, подходит для массивов. Но когда я делаю что-то подобное для переменной, он потерпит неудачу.

int var1 = new int 3; 

внимания, спрашивая снова, как же в Java массиву лечит или новообращенные Примитивный тип данных, как объектов, так как обычно Примитивные типы данных являются не объекты.

Спасибо!

+4

* «как в массиве Java обрабатывает или преобразует примитивный тип данных в качестве объектов» * Это не так. Где вы это слышали? Массивы примитивных типов имеют примитивные типы. – Radiodef

+1

«Каждый Java-программист знает, что массив представляет собой набор объектов, неважно, содержит ли он примитивные типы данных или строки». Неправильно. Массив - это объект, но он не обязательно содержит объекты. –

+0

@ Radiodef Я этого не слышал. Я использую этот термин, чтобы просто реализовать свой вопрос легко. Если Java не рассматривает примитивные типы данных как объекты, как программисты говорят, что Array является Collection of Objects. Поскольку Array хранит целые числа или любые другие примитивные типы данных, которые должны быть сохранены, которые не считаются объектами. –

ответ

3

В Java, есть 2 категории типов: примитивные и ссылки (.) Т.е. объекты

тип массива (будь то примитивный массив или массив объектов) всегда ссылочный тип. Для exmaple int[] является подтипом Object. Вы можете вызвать любые методы в Object по адресу int[].

Тем не менее, int[] представляет собой массив примитивов, а не объектов.

3

JLS-10. Arrays говорит (частично),

В языке программирования Java, массивы являются объектами (§4.3.1), создаются динамически, и могут быть отнесены к переменным типа Object (§4.3.2). Все методы класса Object могут быть вызваны в массиве.

...

Все компоненты массива имеют одинаковый тип, называемый тип компонента массива. Если тип компонента массива равен T, тогда тип самого массива написан T[].

Значение элемента массива типа float всегда является элементом набора значений float (§4.2.3); Аналогично, значение компонента массива типа double всегда является элементом набора значений double.Недопустимо, чтобы значение компонента массива типа float являлось элементом набора значений с расширением float-extended-exponent, который также не является элементом набора значений float, а также для значения массива-компонента типа double быть элементом набора значений с двойным расширенным показателем, который не является также элементом набора значений double.

TL; др Массив примитивов по-прежнему является Object, но его тип компонента по-прежнему примитивного типа. Наконец, хотя это не относится к вашему вопросу, когда примитивный тип используется в месте, где ожидается Object, тогда у Java есть функция, называемая Autoboxing, которая может преобразовать примитив в соответствующий тип-оболочку (и может также произойти обратное, это unboxing). Но массивы могут хранить примитивные типы (в отличие от Collection (s), которые могут хранить только Object экземпляров).

Смежные вопросы