Как реализована длина в массивах Java?
Мне было интересно узнать о реализации length
Java-массива. Я знаю, что использование arrayName.length
дает нам количество элементов в массиве, но было интересно, является ли это методом/функцией или это просто элемент данных массива?
Я предполагаю, что это должен быть элемент данных, поскольку мы не используем скобки ()
при вызове. Но если это член данных, как/когда это значение length
назначено/вычислено?
Ответы
Ответ 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 для получения дополнительной информации.
Ответ 7
Это поле public final
для типа массива. Вы можете обратиться к документу ниже:
http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7
Ответ 8
Каждый массив в java рассматривается как объект. public final length
- это data member
, который содержит число компонентов массива (length
может быть положительным или нулевым)
Ответ 9
Массивы Java, такие как массивы С++, имеют фиксированную длину, которая после ее инициализации не может быть изменена. Но, как вектор шаблона шаблона - vector <T>
- в С++, вы можете использовать Java class ArrayList
, который имеет гораздо больше утилит, чем массивы Java.