1. Масиви в пам'яті
Малюнки в попередніх прикладах трохи неточні.
Під час створення масивів (як і під час створення рядків) у пам'яті виділяються два блоки: один для зберігання власне масиву (контейнера), а другий — під змінну, що зберігає його адресу. Уточнену ситуацію зображено на малюнку нижче:
Зеленим кольором показано масив на 10 елементів типу int і змінну типу int[], яка зберігає адресу (посилання) масиву типу int у пам'яті.
Для порівняння синім кольором позначено звичайну змінну типу int, яка зберігає значення 199.
Чимось нагадує зберігання рядків у пам'яті, чи не так?
Дійсно, рядки. І так само, як під час операцій з рядками, «змінні типу масив» можна присвоювати одна одній:
| Код | Пояснення |
|---|---|
|
Створюємо масив на 10 елементів типу int.У комірку з індексом 2 записуємо значення 4.У комірку з індексом 7 записуємо значення 9.У змінній b зберігаємо адресу, записану в змінній a.Тепер a і b вказують на один і той самий об'єкт-масив у пам'яті.У комірку з індексом 9 об'єкта-масиву записуємо суму значень, які зберігаються в комірках 2 (зберігається 4) і 7 (зберігається 9). |
При цьому об'єкт-масив залишатиметься на своєму місці, а змінні a і b зберігатимуть однакові адреси (посилання) на один і той самий об'єкт. Погляньте на малюнок:
2. Детальніше про роботу з масивом
Масив можна створити з елементів будь-якого типу. Для цього потрібно лише до назви типу додати квадратні дужки. Загальний вигляд створення масиву такий:
тип[] ім'я = new тип[кількість];
де тип — це тип елементів (комірок) масиву, які ми в ньому зберігатимемо. Ім'я — це ім'я змінної, за допомогою якого ми звертатимемося до масиву, а кількість — це кількість комірок у масиві.
У прикладі вище наведено канонічну форму: створення змінної-масиву та створення об'єкта-масиву. Насправді це дві незалежні конструкції.
Можна створити змінну-масив і об'єкт-масив окремо.
тип[] ім'я;
ім'я = new тип[кількість];
І ще один досить важливий момент:
Приклади:
| Код | Пояснення |
|---|---|
|
Створення масиву з n елементів |
|
Створення масиву з 203 елементів |
|
|
0..99), програма аварійно завершиться з помилкою
ArrayIndexOutOfBoundsException — індекс поза межами масиву.
3. Довжина масиву
Як ви побачили в попередньому прикладі, можна окремо створити змінну типу масив і потім десь у коді присвоїти їй значення (посилання на об'єкт-масив). Можна зробити навіть так:
| Код | Пояснення |
|---|---|
|
Створюємо змінну-масив типу int[]Якщо змінна a менша за 10,то створити масив із 10 елементів.Інакше створити масив із 20 елементів |
І як надалі працювати з таким масивом? Як дізнатися, скільки в ньому елементів?
Для цього масив має спеціальну властивість (змінну) — length. І визначити довжину масиву можна за допомогою такого виразу:
array.length;
де array — це ім'я змінної-масиву, а length — це ім'я властивості об'єкта-масиву. Значення у властивості length змінити не можна: саму властивість length можна присвоювати іншим змінним, але їй жодного значення присвоїти не можна (програма просто не скомпілюється).
Отак можна продовжити попередній приклад:
| Код | Пояснення |
|---|---|
|
Створюємо змінну-масив типу int[]Якщо змінна a менша за 10,то створити масив із 10 елементів.Інакше створити масив із 20 елементівЦикл по всіх елементах масиву: від 0 до довжини array.length – 1 |
4. Резюмуємо факти про масиви в Java
Резюмуймо відомі факти про масиви:
Факт 1. Масив складається з багатьох комірок.
Факт 2. Доступ до конкретної комірки здійснюється за її номером.
Факт 3. Усі комірки — одного типу.
Факт 4. Початкове значення для всіх комірок — 0 і null (якщо в комірці зберігається адреса), false (для типу boolean). Докладніше про значення за замовчуванням ви дізнаєтеся з цієї лекції.
Факт 5. String[] list — це просто оголошення змінної: сам контейнер (об'єкт-масив) ще не створено. Щоб із ним можна було працювати, потрібно створити масив (контейнер) і записати його в цю змінну, а потім вже ним користуватися. Див. приклади нижче.
Факт 6. Коли ми створюємо об'єкт-масив (контейнер), маємо вказати, якої він довжини, тобто скільки в ньому комірок. Для цього використовуємо таку команду: new TypeName[n];
Факт 7. Довжину масиву можна визначити за допомогою властивості .length.
Факт 8. Після створення масиву не можна змінити ані тип його елементів, ані їх кількість.
| Код | Пояснення |
|---|---|
|
s дорівнює nulllist дорівнює null |
|
Змінна list зберігає посилання на об'єкт — масив рядків із 10 елементів.n дорівнює 10 |
|
Тепер |
|
Буде згенеровано виняток (помилку програми) — програма аварійно завершиться. list містить порожнє посилання — null |
|
Буде згенеровано виняток (помилку програми) — вихід за межі масиву. Якщо list містить 10 елементів/комірок, то ось їхні допустимі індекси: 0 1 2 3 4 5 6 7 8 9 — загалом 10 значень. |
