1. Літерали цілих чисел

А зараз нова цікава тема — літерали. Дані, внесені безпосередньо в код програми, називають літералами. Тут буде йтися не про будь-які дані, а про значення примітивних типів і типу String.

Наприклад, є такий код:

Код Літерали
int a = 5;
int b = a + 10;
String s = "Sum=" + (a + b);
5
10
"Sum="

Літерали в цьому коді — це число 5, число 10 і рядок Sum=.

У мові Java все, включно з літералами, має тип. Всі цілочислові літерали (цілі числа) в коді мають тип int. Тип int є стандартним типом цілих чисел у Java.

Тому, якщо ви у своєму коді вирішите присвоїти цілочисловий літерал змінній типу byte або short, проблем не буде. Потрібно тільки, щоб значення літерала було в межах діапазону доступних значень типу змінної.

Компілятор у Java досить розумний, щоб зрозуміти, що змінній типу byte можна присвоїти цілочисловий літерал 100, тому жодної проблеми не виникне.

Приклади:

Код Опис
int a = 300;
Буде нормально скомпільовано.
byte a = 100; 
Буде нормально скомпільовано.
byte a = 300; 
Буде помилка компіляції: максимальне значення типу byte дорівнює 127.

У коді можна також використовувати літерали типу long. Для цього в кінці цілого числа слід написати латинську літеру L або l.

Приклади:

Код Опис
long a = 3000000000L; 
Буде нормально скомпільовано.
long a = 3000000000; 
Помилка компіляції: 3 мільярди — завелике число для літерала типу int.
int a = 3000000000L; 
Помилка компіляції: літерал має тип long, а змінна — тип int. До того ж число 3 мільярди перевищує максимальне значення типу int.

Ви, мабуть, звернули увагу, як складно читати великі числа довжиною 10 і більше знаків. Не відразу зрозумієш, що написано в коді: 3 мільярди чи 30. Щоб покращити прочитність коду (а це важливо!), у Java дозволено вставляти в числові літерали символи підкреслення (на значення числа вони не впливають).

Попередній приклад можна переписати з використанням символів підкреслення, і він стане зрозумілішим:

Код Опис
long a = 3_000_000_000L; 
Буде нормально скомпільовано.
long a = 3_000_000_000; 
Помилка компіляції: 3 мільярди — завелике число для літерала типу int.
int a = 3_000_000_000L; 
Помилка компіляції: літерал має тип long, а змінна — тип int. До того ж число 3 мільярди перевищує максимальне значення типу int.

Використання коми в числових літералах не допускається, тому що кома використовується з іншою метою. Наприклад, для відокремлення один від одного аргументів під час виклику методу.



2. Літерали дійсних чисел

У коді можна задавати не тільки цілочислові літерали, а й літерали з рухомою крапкою (дійсні числа).

Власне, правило дуже просте: якщо в коді є число з крапкою, то це число — літерал з рухомою крапкою. І не просто літерал, а літерал типу double.

Можна також створювати літерали типу float, але такі літерали мають закінчуватися літерою F або f.

Приклади:

Код Опис
double a = 100.0; 
Буде нормально скомпільовано.
double a = 100.;
Буде нормально скомпільовано.
double a = .0;
Буде нормально скомпільовано.
float a = 100.0f; 
Буде нормально скомпільовано.
float a = 100.0; 
Буде помилка компіляції: змінна має тип float, а літерал — тип double.

До речі, можна дуже легко перетворити цілочисловий літерал на літерал типу float або double: для цього слід просто дописати до нього суфікс F (для float) або D (для double). Приклади:

Код Опис
double a = 100D; 
Буде нормально скомпільовано.
float a = 100F; 
Буде нормально скомпільовано.
int a = 300D; 
Буде помилка компіляції: змінна має тип int, а літерал — тип double.

Для літералів з рухомою крапкою можна також використовувати «наукову форму запису»: крім значущої частини цього числа, вказується також степінь десяти. Приклад:

Літерал Математичний запис Значення
1.23E2
1.23 * 102
123.0
1.23E3
1.23 * 103
1230.0
1.23E-6
1.23 * 10-6
0.00000123
1E6
1.0 * 106
1000000.0
1E-10
1.0 * 10-10
0.0000000001


3. Літерали рядків

У коді також можна задавати цілі рядки тексту. Щоб компілятор вважав рядок саме даними (рядком тексту), а не частиною коду, весь рядок з обох сторін беруть у подвійні лапки.

Якщо в одному рядку коду є кілька подвійних лапок, вони обробляються попарно. Перша подвійна лапка позначає початок літерала, наступна — кінець літерала. Наступна за нею позначає початок наступного літерала, а наступна за нею — кінець цього літерала і т. д.

Кожен такий літерал має тип String.

Приклади

Код Пояснення
"+" + "+" + "+" + "+" + "+"
У рядку 5 літералів, кожен з яких складається з одного символу +.
""
Цей літерал — порожній рядок, тобто рядок, де немає символів.
"2+3" + "-5"
Тут два літерали. Результатом буде рядок 2+3-5, а не число.
"return" + ";"
Тут також два літерали, оператора return тут немає.

Якщо рядковий літерал надто довгий, його можна розбити на кілька рядків і склеїти оператором «плюс»:

Код Пояснення
String s = "Віють вітри, віють буйні, "
         + "Аж дерева гнуться. "
         + "О, як моє болить серце, "
         + "А сльози не ллються.";
Якщо вивести ці рядки на екран, увесь текст буде виведено як один рядок!


4. Літерали символів

У коді можна задавати не лише рядкові літерали, а й літерали з окремих символів. Тут ідеться не про рядок, що містить один символ, а про літерали типу char.

На відміну від рядків, символьні літерали беруть в одинарні лапки. Між одинарними лапками обов'язково має бути символ, і тільки один. Не може бути одинарних лапок, між якими нічого немає.

Приклади:

Код Пояснення
'A'
Літерал типу char, містить латинську літеру A.
'@' 
Літерал типу char, містить символ @
'' 
Літерал типу char, містить японський ієрогліф — так теж можна.
'\u1f3a'
Літерал типу char, містить символ у кодуванні Unicode, який задано його номером.

В останньому прикладі задано символ у кодуванні Unicode за допомогою спеціального запису: спочатку вказано префікс \u, потім 4 шістнадцяткових символи. Докладніше про це ми розповімо в наступних лекціях.