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[] { 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 = { "Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"};
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ