1. Масив типу String
Ну і далі хотілося б стисло розповісти про масив типу String
.
Як ми вже зазначали, масив може бути будь-якого типу. А отже, можна створити масив типу String
. Отакий вигляд мав би код, якби нам потрібно було написати програму, що «вводить з клавіатури 10 рядків і виводить їх на екран у зворотному порядку».
|
Створюємо об'єкт Scanner Створюємо об'єкт-масив на 10 елементів Цикл від 0 до 9 Читаємо з клавіатури рядок і зберігаємо його в чергову комірку масиву Цикл від 9 до 0 Виводимо на екран чергову комірку масиву |
Код майже не змінився! Довелося тільки під час створення масиву замінити тип int
на String
, а для зчитування рядка з клавіатури замінити метод nextInt()
на nextLine()
.
2. Масив типу String
у пам'яті
І ще один корисний факт. Розгляньмо 3 малюнки:
Малюнок 1. Як об'єкт String
розташований у пам'яті:
Цей малюнок ми взяли з попередніх лекцій.
Звертаємо вашу увагу, що текст рядка не зберігається безпосередньо в змінній: для нього виділяється окремий блок пам'яті. А в змінній типу String
зберігається адреса (посилання) на об'єкт із текстом.
Малюнок 2. Як масив цілих чисел розташований у пам'яті:

Теж знайомий малюнок.
Малюнок 3. Як розташований у пам'яті масив рядків:

Ліворуч ми бачимо змінну-масив типу String[]
(зберігає адресу об'єкта-масиву).
У центрі — об'єкт-масив типу String
.
А праворуч — об'єкти-рядки, в яких зберігаються якісь тексти.
У комірках об'єкта-масиву типу String
зберігаються не самі рядки (тексти), а їхні адреси (посилання). Так само, як у змінних типу String
зберігаються адреси рядків (тексту).
Враховуйте цей факт, коли порівнюватимете комірки масиву:
|
Створюємо масив на 10 рядків Вносимо значення в масив true (посилання однакові)false (посилання неоднакові)true (рядки однакові)true (рядки також однакові)
|
3. Швидка ініціалізація масиву в Java
Масиви — дуже корисна річ, тому розробники Java доклали зусиль, щоби працювати з масивами було якомога зручніше.
І найперше, що вони зробили, — це спростили ініціалізацію масиву, внесення в нього початкових значень.
Адже дуже часто окрім даних, які програма звідкись зчитує, їй потрібні для роботи ще й свої внутрішні дані. Наприклад, нам потрібно зберігати в масиві кількість днів у кожному місяці. Отакий вигляд може мати цей код:
int[] months = new int[12];
months[0] = 31; // січень
months[1] = 28; // лютий
months[2] = 31; // березень
months[3] = 30; // квітень
months[4] = 31; // травень
months[5] = 30; // червень
months[6] = 31; // липень
months[7] = 31; // серпень
months[8] = 30; // вересень
months[9] = 31; // жовтень
months[10] = 30; // листопад
months[11] = 31; // грудень
Але є спосіб його скоротити — подякуймо авторам Java:
// кількість днів у місяцях року
int[] months = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Можна просто перелічити через кому всі значення масиву!
Зручно, чи не так? Але й це ще не все.
Виявляється, компілятор може визначити тип контейнера (об'єкта-масиву) на основі типу змінної-масиву, а для визначення довжини масиву — банально підрахувати кількість елементів, написаних у фігурних дужках.
Отож цей код можна скоротити ще сильніше:
// кількість днів у місяцях року
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Хіба не краса? 🙂
Такий запис називається «швидка ініціалізація масиву». До речі, це працює не тільки для типу int
...
// назви місяців року
String[] months = { "Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"};
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ