1. Список примітивних типів
У Java є 8 базових примітивних типів. Примітивними їх називають тому, що значення цих типів не є об'єктами і зберігаються прямо всередині змінних.
Ось таблиця, яка містить коротку інформацію про ці типи:
| Тип | Розмір, байт |
Діапазон значень | Значення за замовчуванням | Опис |
|---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Найменше ціле — один байт |
short |
2 | -32,768 .. 32,767 | 0 |
Коротке ціле, два байти |
int |
4 | -2*109 .. 2*109 | 0 |
Ціле число, 4 байти |
long |
8 | -9*1018 .. 9*1018 | 0L |
Довге ціле, 8 байтів |
float |
4 | -1038 .. 1038 | 0.0f |
Дробове, 4 байти |
double |
8 | -10308 .. 10308 | 0.0d |
Дробове, подвійної довжини, 8 байтів |
boolean |
1 | true, false |
false |
Логічний тип (тільки true & false) |
char |
2 | 0 .. 65,535 | '\u0000' |
Символи, 2 байти, все більше 0 |
До речі, важливий момент. Якщо ви оголосили змінну-класу (поле класу) або статичну змінну-класу, і не присвоїли їй жодного значення, вона ініціалізується значенням за замовчуванням. Список таких значень наведено у таблиці.
Локальні змінні методів не мають значень за замовчуванням, і якщо ви не присвоїли такій змінній жодного значення, вона вважається не ініціалізованою і використати її значення неможливо.
Але давайте повернемося до примітивних типів і розглянемо їх детальніше
2. Цілі типи
У мові Java аж 4 цілі типи: byte, short, int і long. Вони відрізняються розміром і діапазоном значень, які можуть зберігати.
Тип int
Найбільш часто використовуваним є тип int. Його назва походить від Integer (цілий). Усі цілочисельні літерали в коді мають тип int (якщо в кінці числа не вказана літера L, F або D).
Змінні цього типу можуть приймати значення від -2,147,483,648 до +2,147,483,647.
Цього досить багато і вистачає майже для всіх випадків життя. Майже всі функції, які повертають число, повертають число типу int.
Приклади:
| Код | Пояснення |
|---|---|
|
Метод length() повертає довжину рядка |
|
Поле length містить довжину масиву. |
Тип short
Тип short отримав свою назву від short int. Його ще називають коротке ціле. На відміну від типу int, його довжина всього два байти і можливий діапазон значень від -32,768 до +32,767.
Тобто в ньому навіть число мільйон не збережеш. Навіть 50 тисяч. Це найрідше використовуваний цілочисельний тип у Java. В основному його використовують, коли хочуть заощадити на пам'яті.
Припустимо, у вас ситуація, коли заздалегідь відомо, що значення з якими ви працюєте не перевищуватимуть 30 тисяч, і таких значень мільйони.
Наприклад, ви пишете застосунок, який обробляє картинки надвисокої якості: на один колір припадає 10 біт. А точок у вас у картинці — мільйон. І отут уже відіграє роль, використовуєте ви тип int чи short.
Тип long
Цей тип отримав свою назву від long int — його ще називають довге ціле. На відміну від типу int, у нього просто гігантський діапазон значень: від -9*1018 до +9*1018
Чому ж він не є основним цілим типом?
Уся справа в тому, що Java з'явилася ще в середині 90-х, коли більшість комп'ютерів були 32-бітними. А це означало, що всі процесори були заточені під роботу з числами із 32 біт. З цілими числами із 64 біт процесори працювати вже вміли, але операції з ними були повільнішими.
Тому програмісти розумно вирішили зробити стандартним цілим типом тип int, ну а тип long використовувати тільки тоді, коли без нього дійсно не обійтися.
Тип byte
Це найменший цілочисельний тип у Java, але далеко не найрідше використовуваний. Його назва збігається зі словом byte — мінімальна адресована комірка пам'яті в Java.
Розмір допустимих значень типу byte не такий вже й великий: від -128 до +127. Але не в цьому його сила. Тип byte найчастіше використовується, коли потрібно зберігати в пам'яті великий блок знеособлених даних. Масив типу byte просто ідеально підходить для цих цілей.
Наприклад, вам потрібно кудись скопіювати файл.
Вам не потрібно обробляти вміст файлу: ви просто хочете створити область пам'яті (буфер), скопіювати в неї вміст файлу, а потім записати ці дані з буфера в інший файл. Масив типу byte — те, що потрібно для цих цілей.
Тим більше, що в змінній-типу-масив зберігається тільки посилання на область пам'яті. При передачі значення цієї змінної в якийсь метод відбудеться тільки передача адреси в пам'яті, а сам блок пам'яті копіюватися не буде.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // читаємо дані з файлу в буфер
destFile.write(buffer, 0, size); // записуємо дані з буфера в файл
// припиняємо копіювання, якщо буфер заповнений не повністю
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Дробові типи
Серед примітивних типів також є два дробові. Хоча це не зовсім точна назва. Офіційно вони називаються числа з плаваючою точкою — floating point numbers. Назва походить із стандарту, коли цілу і дробову частину числа розділяє точка (а не кома).
У кожній країні свої стандарти для запису чисел (раптом!).
Багато з нас звикли писати точки для розділення тисяч і кому для відокремлення дробової частини: наприклад, мільйон цілих і 153 тисячних ми б записали так 1.000.000,153. А ось у США, де жили творці Java, прийнятий інший стандарт: 1,000,000.153
У Java є два примітивних типи з плаваючою точкою: double і float.
Як ми вже казали раніше, ці типи всередині влаштовані специфічним чином: фактично всередині кожної змінної цих типів знаходиться не одне число, а два:
Наприклад, дробове число 987654.321 можна представити як 0.987654321*106. Тому в пам'яті воно буде представлено як два числа 987654321 (мантиса — значуща частина числа) і 6 (показник — ступінь десятки)
Тип float
Сама назва типу float походить від floating point number. Розмір цього типу зовсім невеликий — лише 4 байти (32 біти), але він може зберігати значення від -3.4*1038 до 3.4*1038. На мантису віддається 24 біти, на показник — 8 біт. Цей тип здатний зберігати лише 8 значущих цифр.
Такий підхід дозволяє зберігати набагато більші числа, ніж int, використовуючи ті ж 4 байти. Але при цьому ми жертвуємо точністю. Частина пам'яті витрачається на зберігання мантиси, тому такі числа зберігають лише 6-7 знаків після коми, інші відкидаються.
Приклад:
| Код | Значення змінної |
|---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Як бачите, основний недолік цього типу — дуже маленька кількість значущих цифр і втрата точності вже у восьмій цифрі. Тому тип float не надто популярний серед Java-програмістів.
Тип double
Тип double є стандартним типом з плаваючою точкою. Його назва походить від double floating point. Його ще називають числом з плаваючою точкою подвійної точності. Усі дробові літерали за замовчуванням мають тип double.
Цей тип займає 8 байтів пам'яті (64 біти) і може зберігати значення від -1.7*10308 до 1.7*10308. Важливим моментом є те, що на його мантису виділяється 53 біти, а решта 11 — на показник.
Це дозволяє зберігати 15-17 значущих цифр.
Приклад:
| Код | Значення змінної |
|---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Така точність, особливо у порівнянні з типом float, є визначальною: 99% усіх операцій з дробовими числами виконуються з типом double.
На показник виділяється 11 біт, що дозволяє зберігати ступінь десятки від -323 до +308 (ступінь двійки — від -1024 до +1023). Тип double легко може зберігати число із сотнею нулів після коми:
| Код | Значення змінної |
|---|---|
|
600.0 |
4. Нескінченність
Числа з плаваючою точкою мають ще одну цікаву особливість: вони дозволяють зберігати спеціальне значення, що позначає нескінченність. Причому може бути позитивна нескінченність і негативна нескінченність.
Приклади:
| Код | Примітка |
|---|---|
|
|
|
|
|
|
Якщо нескінченність помножити на число, вийде нескінченність. Якщо до нескінченності додати число, вийде нескінченність. Дуже зручно.
Не число (NaN)
Будь-які операції з нескінченністю дають нескінченність. Загалом так, але не завжди.
Числа з плаваючою точкою можуть зберігати ще одне спеціальне значення — NaN. Це скорочення від Not a Number (не число).
У математиці, якщо поділити нескінченність на нескінченність, повинна виникнути невизначеність.
Ну, а в Java, якщо поділити нескінченність на нескінченність, буде NaN.
Приклади:
| Код | Примітка |
|---|---|
|
|
|
|
|
|
Будь-яка операція з NaN дає NaN.
5. Тип char
Серед примітивних типів у Java є ще один, який заслуговує на особливу увагу — тип char. Його назва походить від слова Character, а сам тип використовується для того, щоб зберігати символи.
Адже символи — це саме те, з чого складаються рядки: кожний рядок містить у собі масив символів.
Але ще цікавіше те, що тип char — це і числовий тип теж! Так би мовити, тип подвійного призначення.
Вся справа в тому, що насправді тип char зберігає не символи, а коди символів з кодування Unicode. Кожному символу відповідає число — числовий код символу.
Кожна змінна типу char займає в пам'яті два байти (як і тип short). Але на відміну від типу short, цілий тип char — беззнаковий, і може зберігати значення від 0 до 65,535.
Тип char — гібридний тип. Його значення можна інтерпретувати і як числа (їх можна додавати і множити), і як символи. Так було зроблено тому, що хоч символи і мають візуальне представлення, для комп'ютера вони в першу чергу просто числа. І працювати з ними як з числами набагато зручніше.
Unicode
Unicode — це спеціальна таблиця (кодування), яка містить усі символи світу. І у кожного символу є свій номер. Виглядає вона приблизно так:

Присвоїти значення змінній типу char можна різними способами.
| Код | Опис |
|---|---|
|
Змінна а буде містити латинську букву А. |
|
Змінна а буде містити латинську букву А. Її код якраз 65. |
|
Змінна а буде містити латинську букву А.Її код якраз 65, що дорівнює 41 у шістнадцятковій системі. |
|
Змінна а буде містити латинську букву А.Її код якраз 65, що дорівнює 41 у шістнадцятковій системі.Два зайвих нуля нічого не змінюють. |
|
Змінна а буде містити латинську букву А.Ще один спосіб задати символ за його кодом. |
Найчастіше просто вказують символ у лапках (як у першому рядку таблиці). Хоча популярний і останній спосіб. Його перевага в тому, що його можна використовувати в рядках.
І як ми говорили, тип char — це і цілий тип теж, тому можна написати так:
| Код | Вивід на екран |
|---|---|
|
На екран буде виведена латинська буква B.Тому що: A – 65B – 66C – 67 |
Робота з типом char
Кожний символ char — це в першу чергу число (код символу), а потім вже символ. Знаючи код символу, завжди можна отримати його в програмі. Приклад:
| Код | Вивід на екран |
|---|---|
|
|
Стандартні коди
Ось найвідоміші коди символів:
| Символи | Коди |
|---|---|
0, 1, 2, ... 9 |
48, 49, 50, ... 57 |
a, b, c, ... z |
97, 98, 99, ... 122 |
A, B, C, ... Z |
65, 66, 67, ... 90 |
6. Тип boolean
І останній примітивний тип — це boolean.
Як ти вже знаєш, він може приймати лише два значення: true та false.
Власне, все, що потрібно знати про цей тип, ти вже знаєш.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ