Как осуществляется доступ к элементам массива в Java?
Прочитал статью о различиях массивов в C++ и в Java. Понял, что в C++ доступ к элементам происходит путем арифметики указателей, что делает эту процедуру достаточно быстрой ( Что дает преимущество перед односвязными списками ). Но нигде ни слова не нашел, как это делается в Java. Насколько я знаю, в Java нет подобных манипуляций со ссылками, а массив является полноценным объектом ( В отличии от примитивной структуры данных в плюсах ). Стало интересно, как осуществляется произвольный доступ к элементам массива Java и насколько быстра эта операция?
Синтаксически так же, как и в C++. Различия в скорости порядка наносекунд, которые виртуальная машина тратит на разыменовывание пары указателей и контроль границ.
не знаю как там в плюсах, но в джаве все так же, только под капотом и к тому же на тех же плюсах и написано. В джаве есть массивы, а есть коллекции которые на массивы основаны. Массив не является объектом. Коллекция, а конкретно ArrayList уже объект, ну и в основе своей работы использует массив.
Странно, в статье говорится, что массив в Java - объект. И мне кажется это логичным, т.к. он ведет себя как любой другой объект ( Инициализируется с помощью new, содержит поле lengh ). Можете объяснить, почему я не прав?
Aleksey2411, это немножно холиварный вопрос. Примитивы в джаве стоят отдельно от ссылочных типов. Вы ведь не можете сделать наследника массива? и это не потому что он final. Вот наследника ArrayList можно сделать. Вы не можете переопределить методы массива примитивов. Ну и методы там скрытые нативные на плюсах в основном у массива.
даже идея не подсветит откуда у вас это поле у массива, а поле моего класса подсветит и определит
Aleksey2411, в общем есть куча подкопотных вот таких методов, там все заоптимизировано, что не будет работать хуже чем на плюсах. Как я читал например вот этим методом выделение памяти и копирование старого массива будет за один такт.
Jacen11, чувак, ты не прав. Есть определение объекта, и оно не включает в себя "можешь унаследоваться или не можешь, но тогда оно должно быть final". Массив - это объект.