Подтвердить что ты не робот

Как реализована длина в массивах Java?

Мне было интересно узнать о реализации length Java-массива. Я знаю, что использование arrayName.length дает нам количество элементов в массиве, но было интересно, является ли это методом/функцией или это просто элемент данных массива?

Я предполагаю, что это должен быть элемент данных, поскольку мы не используем скобки () при вызове. Но если это член данных, как/когда это значение length назначено/вычислено?

4b9b3361

Ответ 1

В соответствии с Спецификацией языка Java (в частности §10.7. Члены массива) это поле:

  • Поле public final length, которое содержит количество компонентов массива (длина может быть положительной или нулевой).

Внутренне значение, вероятно, хранится где-то в заголовке объекта, но это детализация реализации и зависит от конкретной реализации JVM.

В HotSpot VM (тот, что в популярном Oracle (ранее Sun) JRE/JDK) хранит размер в заголовке объекта:

[...] массивы имеют третье поле заголовка для размера массива.

Ответ 2

Вы правы, length является членом данных, а не методом.

Из Учебник по массивам:

Длина массива устанавливается при создании массива. После создания его длина фиксирована.

Ответ 3

Если у вас есть массив известного типа или является подклассом Object [], вы можете сначала передать массив.

Object array = new ????[n];
Object[] array2 = (Object[]) array;
System.out.println(array2.length);

или

Object array = new char[n];
char[] array2 = (char[]) array;
System.out.println(array2.length);

Однако, если вы не знаете, какой тип массива вы можете использовать Array.getLength(Object);

System.out.println(Array.getLength(new boolean[4]);
System.out.println(Array.getLength(new int[5]);
System.out.println(Array.getLength(new String[6]);

Ответ 4

Да, это должно быть поле. И я думаю, что это значение присваивается при создании вашего массива (вы должны выбрать длину массива при создании, например: int[] a = new int[5];).

Ответ 5

Я считаю, что это просто свойство, когда вы обращаетесь к нему как к свойству.

String[] s = new String[]{"abc","def","ghi"}
System.out.println(s.length)

возвращает 3

Если бы это был метод, вы бы назовете s.length() правильно?

Ответ 6

Из JLS:

Длина массива доступна как конечная длина переменной экземпляра

и

Как только объект массива будет создан, его длина никогда не меняется. Чтобы создать массив переменная относится к массиву разная длина, ссылка на другому массиву необходимо присвоить переменная.

И массивы реализуются в JVM. Вы можете посмотреть VM Spec для получения дополнительной информации.

Ответ 8

Каждый массив в java рассматривается как объект. public final length - это data member, который содержит число компонентов массива (length может быть положительным или нулевым)

Ответ 9

Массивы Java, такие как массивы С++, имеют фиксированную длину, которая после ее инициализации не может быть изменена. Но, как вектор шаблона шаблона - vector <T> - в С++, вы можете использовать Java class ArrayList, который имеет гораздо больше утилит, чем массивы Java.