Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

Ссылки

Когда мы говорим про примитивные типы данных, такие как int или double, то, на интуитивном уровне, все довольно понятно. Под каждое значение выделяется некоторый размер памяти (в соответствии с типом), в которой и хранится само значение. А как должна выделиться память под хранение массива? И что такое массив в памяти? На уровне хранения, понятия массив - не существует. Массив представляется цельным куском памяти, размер которого вычисляется по формуле "количество элементов * количество памяти под каждый элемент". Из этого утверждения есть два интересных вывода:

Размер массива - фиксированная величина. Те динамические массивы, с которыми мы имеем дело во многих языках, реализованы уже внутри языка, а не на уровне железа. Все элементы массива имеют один тип и занимают одно и тоже количество памяти. Благодаря этому появляется возможность простым умножением (по формуле, описанной выше) получить адрес той ячейки, в которой лежит нужный нам элемент. Именно это происходит под капотом, при обращении к элементу массива под определенным индексом.

img

Фактически индекс в массиве - смещение относительно начала куска памяти содержащего данные массива.

Теперь должно быть понятно почему индексы в массиве начинаются с нуля. 0 - означает отсутствие смещения.

Рассмотрим еще раз определение массива:

int[] ar = {1, 2, 3};

Такая переменная как ar называется ссылкой, потому что она сама по себе не является массивом и не хранит данные массива, а лишь ссылается на область памяти, в которой хранится массив. Это важное понятие в java которое будет часто встречаться в дальнейшем.

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →