1. Масив типу String

Ну і далі хотілося б стисло розповісти про масив типу String.

Як ми вже зазначали, масив може бути будь-якого типу. А отже, можна створити масив типу String. Отакий вигляд мав би код, якби нам потрібно було написати програму, що «вводить з клавіатури 10 рядків і виводить їх на екран у зворотному порядку».

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Створюємо об'єкт Scanner
Створюємо об'єкт-масив на 10 елементів
Цикл від 0 до 9

Читаємо з клавіатури рядок і зберігаємо його в чергову комірку масиву
Цикл від 9 до 0

Виводимо на екран чергову комірку масиву

Код майже не змінився! Довелося тільки під час створення масиву замінити тип int на String, а для зчитування рядка з клавіатури замінити метод nextInt() на nextLine().


2. Масив типу String у пам'яті

І ще один корисний факт. Розгляньмо 3 малюнки:

Малюнок 1. Як об'єкт String розташований у пам'яті:

Об'єкт типу String у пам'яті

Цей малюнок ми взяли з попередніх лекцій.

Звертаємо вашу увагу, що текст рядка не зберігається безпосередньо в змінній: для нього виділяється окремий блок пам'яті. А в змінній типу String зберігається адреса (посилання) на об'єкт із текстом.

Малюнок 2. Як масив цілих чисел розташований у пам'яті:

Теж знайомий малюнок.

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

Ліворуч ми бачимо змінну-масив типу String[] (зберігає адресу об'єкта-масиву).

У центрі — об'єкт-масив типу String.

А праворуч — об'єкти-рядки, в яких зберігаються якісь тексти.

У комірках об'єкта-масиву типу String зберігаються не самі рядки (тексти), а їхні адреси (посилання). Так само, як у змінних типу String зберігаються адреси рядків (тексту).

Враховуйте цей факт, коли порівнюватимете комірки масиву:

String[] array = new String[10];

array[1] = "Привіт";
array[2] = array[1];
array[3] = new String("Привіт");
// порівнюємо
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
Створюємо масив на 10 рядків

Вносимо значення в масив



true (посилання однакові)
false (посилання неоднакові)
true (рядки однакові)
true (рядки також однакові)

3
Задача
Модуль 1. Java Syntax,  9 рівень2 лекція
Недоступна
Ласкаво просимо! Але не всіх.
Перед тобою метод signIn(), який вітає користувачів сайту. Зараз він вітає всіх користувачів, а має вітати лише зареєстрованих. Імена всіх незареєстрованих користувачів — "user". Додай перевірку імені користувача на початку методу signIn(). Якщо ім'я користувача — "user", слід перервати виконання ме

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 = { "Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"};