Java Типи даних
Примітивний тип даних визначає розмір та тип значень змінних та не має додаткових методів.
У Java існує вісім примітивних типів даних:
| Тип даних |
Розмір |
Опис |
| byte |
1 byte |
Зберігає цілі числа від -128 до 127 |
| short |
2 bytes |
Зберігає цілі числа від -32768 до 32767 |
| int |
4 bytes |
Зберігає цілі числа від -2147483648 до 2147483647 |
| long |
8 bytes |
Зберігає цілі числа від -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| float |
4 bytes |
Зберігає дрібні числа. Достатньо для зберігання від 6 до 7 десяткових цифр |
| double |
8 bytes |
Зберігає дрібні числа. Достатньо для зберігання 15 десяткових цифр |
| boolean |
1 bit |
Зберігає значення true або false |
| char |
2 bytes |
Зберігає один символ/літер або значення ASCII |
Числа
Типи примітивних чисел поділяються на дві групи:
Цілочисленні типи зберігають цілі числа, позитивні чи негативні (наприклад, 123 чи -456), без десяткових знаків. Допустимі типи byte, short, int і long. Який тип слід використовувати залежить від числового значення.
Типи з плаваючою комою представляють числа з дрібною частиною, що містять один або кілька десяткових знаків. Є два типи: float і double.
Незважаючи на те, що Java існує багато числових типів, найчастіше для чисел використовуються int (для цілих чисел) і double (для чисел з плаваючою комою). Однак ми опишемо їх усі, поки ви все ще продовжуєте це читати 😀
Цілочисленні типи
Byte
Тип даних byte може зберігати цілі числа від -128 до 127. Його можна використовувати замість int або інші цілі типи для збереження пам'яті, коли ви впевнені, що значення буде в діапазоні від -128 до 127:
приклад
byte myNum = 100; System.out.println(myNum);
Short
Тип даних short може зберігати цілі числа від -32768 до 32767:
приклад
short myNum = 5000; System.out.println(myNum);
Int
Тип даних int може зберігати цілі числа від -2147483648 до 2147483647. Загалом і в нашому підручнику тип даних int є кращим типом даних, коли ми створюємо змінні з числовим значенням.
приклад
int myNum = 100000; System.out.println(myNum);
Long
Тип даних long може зберігати цілі числа від -9223372036854775808 до 9223372036854775807. Він використовується, коли int недостатньо великий для зберігання значення.
приклад
long myNum = 15000000000L;System.out.println(myNum);
Типи з плаваючою комою
Ви повинні використовувати тип з плаваючою комою щоразу, коли вам потрібно число з десятковою комою, наприклад 9.99 або 3.14515.
Float
Тип даних float може зберігати дробові числа від 3.4e−038 до 3.4e+038.
приклад
float myNum = 5.75f;
Double
Тип даних double може зберігати дробові числа від 1.7e-308 до 1.7e+308. Зверніть увагу, що ви повинні закінчувати значення символом d
приклад
double myNum = 19.99d;
Використовувати float або double?
точність Значення з плаваючою комою вказує, скільки цифр значення може мати після коми Точність float складає всього шість або сім десяткових цифр, в той час як точність змінних double складає близько 15 цифр, тому для більшості розрахунків безпечніше використовувати double .
Наукові числа
Число з плаваючою комою також може бути науковим числом з буквою "е", що означає ступінь 10:
приклад
float f1 = 35e3f; double d1 = 12E4d; System.out.println(f1); System.out.println(d1);
Логічні (бульові) значення
Логічний тип даних оголошується за допомогою ключового слова boolean і може набувати лише значення true або false :
приклад
boolean isJavaFun = true; boolean isFishTasty = false; System.out.println(isJavaFun); // Виведе true System.out.println(isFishTasty); // Виведе false
Логічні (бульові) значення в основному використовуються для умовного тестування, про яке ви дізнаєтесь більше у наступному розділі.
Символи
Тип даних char використовується для зберігання одиночного символ. Символ повинен бути поміщений у одинарні лапки, наприклад 'A' або 'c':
приклад
char myGrade = 'B'; System.out.println(myGrade);
Крім того, ви можете використовувати значення ASCII для відображення певних символів:
приклад
char myVar1 = 65, myVar2 = 66, myVar3 = 67; System.out.println(myVar1); System.out.println(myVar2); System.out.println(myVar3);
Порада: Список усіх значень ASCII можна знайти у Довіднику за таблицями ASCII на нашому сайті W3Schools російською.
Рядки
Тип даних String використовується зберігання послідовності символів (тексту). Строкові значення повинні бути укладені у подвійні лапки:
приклад
String greeting = "Hello World"; System.out.println(greeting);
Тип String настільки часто використовується та інтегрований в Java, що деякі називають його "спеціальним" дев'ятим типом".
Рядок у Java насправді є непримітивним типом даних, оскільки він посилається на об'єкт. Об'єкт String має методи, які використовуються для виконання певних операцій із рядками. Не хвилюйтеся, якщо ви поки що не розумієте термін "об'єкт". Ви дізнаєтесь більше про рядки та об'єкти в наступному розділі.
Непримітивні типи даних
Непримітивні типи даних називаються посилальними типамиоскільки вони відносяться до об'єктів.
Основна відмінність між примітивними і непримітивними типами даних полягає в наступному:
- Примітивні типи зумовлені (вже визначені) Java. Непримітивні типи створюються програмістом і визначаються Java (крім String )
- Непримітивні типи можна використовувати для виклику методів виконання певних операцій, тоді як примітивні типи що неспроможні
- Примітивний тип завжди має значення, в той час як непримітивні типи можуть бути null
- Примітивний тип починається з малої літери, а не примітивний — з великої
- Розмір примітивного типу залежить від типу даних, у той час як непримітивні типи мають однаковий розмір
Приклади непримітивних типів: Strings, Arrays, Classes, Interface та ін. Ви дізнаєтесь більше про це у наступному розділі.
Який тип даних містить цілі та дробові числа
Однією з основних особливостей Java є те, що ця мова є строго типізованою. І це означає, кожна змінна і константа представляє певний тип і цей тип суворо визначений. Тип даних визначає діапазон значень, які може зберігати змінна або константа.
Отже, розглянемо систему вбудованих базових типів даних, яка використовується для створення змінних Java. А вона представлена такими типами.
boolean : зберігає значення true чи false
boolean isActive = false; boolean isAlive = true;
short a = 3; short b = 8;
long a = 5; long b = 10;
double x = 8.5; double y = 2.7;
float x = 8.5F; float y = 2.7F;
При цьому змінна може набувати лише тих значень, які відповідають її типу. Якщо змінна представляє цілий тип, то вона не може зберігати дробові числа.
Цілі числа
Всі цілочисленні літерали, наприклад, числа 10, 4, -5, сприймаються як значення типу int , проте ми можемо надавати цілочисленні літерали іншим цілочисловим типам: byte, long, short. У цьому випадку Java автоматично здійснює відповідні перетворення:
byte a = 1; short b = 2; long c = 2121;
Однак якщо ми захочемо присвоїти змінній типу long дуже велике число, яке виходить за межі допустимих значень для типу int, то ми зіткнемося з помилкою під час компіляції:
long num = 2147483649;
Тут число 2147483649 є допустимим типу long, але виходить за граничні значення типу int. І оскільки всі цілі значення за замовчуванням розцінюються як значення типу int, то компілятор вкаже нам на помилку. Щоб вирішити проблему, треба додати до суфікс l або L , який вказує, що число представляє тип long:
long num = 2147483649L;
Як правило, значення для цілих змінних задаються в десятковій системі числення, проте ми можемо застосовувати й інші системи числення. Наприклад:
int num111 = 0x6F; // 16-терическая система, число 111 int num8 = 010; // 8-річна система, число 8 int num13 = 0b1101; // 2-річна система, число 13
Для завдання шістнадцяткового значення після символів 0x вказується число у шістнадцятковому форматі. Так само вісімкове значення вказується після символу 0 , а двійкове значення - після символів 0b .
Також цілі числа підтримують розділення розрядів числа за допомогою символу підкреслення:
int x = 123_456; int y = 234_567__789; System.out.println(x); // 123456 System.out.println(y); // 234567789
Числа з плаваючою точкою
При присвоєнні змінної типу float дробового літералу з плаваючою точкою, наприклад, 3.1, 4.5 і т.д. Java автоматично розглядає цей літерал як значення типу double . І щоб вказати, що це значення має розглядатися як float , нам треба використовувати суфікс f:
float fl = 30.6f; double db = 30.6;
І хоча в даному випадку обидві змінні мають практично одне значення, але ці значення по-різному розглядатимуть і займатимуть різне місце в пам'яті.
Символи та рядки
Як значення змінна символьного типу отримує одиночний символ, укладений одинарні лапки: char ch='e'; . Крім того, змінної символьного типу також можна присвоїти ціле значення від 0 до 65535 . У цьому випадку змінна знову ж таки зберігатиме символ, а цілечисленне значення вказуватиме на номер символу в таблиці символів Unicode (UTF-16). Наприклад:
char ch = 102; // Символ 'f' System.out.println(ch);
Ще однією формою завдання символьних змінних є шістнадцяткова форма: змінна набуває значення у шістнадцятковій формі, яке слідує після символів "u". Наприклад, char ch = '; знову ж таки зберігатиме символ 'f'.
Символьні змінні не варто плутати з рядковими, а не ідентично a. Рядкові змінні представляють об'єкт String , який на відміну від char або int не є примітивним типом Java:
String hello = "Hello. "; System.out.println(hello);
Крім власне символів, які представляють літери, цифри, розділові знаки, інші символи, є спеціальні набори символів, які називають керуючими послідовностями. Наприклад, найпопулярніша послідовність - "\n". Вона виконує перенесення на наступний рядок. Наприклад:
String text = "Hello \nworld"; System.out.println(text);
Результат виконання цього коду:
В даному випадку послідовність \n буде сигналом, що необхідно зробити переведення на наступний рядок.
Починаючи з версії 15 Java підтримує тестові блоки (text blocks) - багаторядковий текст, одягнений у потрійні лапки. Розглянемо, у чому їхня практична користь. Наприклад, виведемо великий багаторядковий текст:
String text = "Ось думка, якій весь я відданий,\n"+ "Підсумок всього, що розум скупив.\n"+ "Лише той, ким бій за життя звіданий,\n"+ "Життя і свободу заслужив."; System.out.println(text);
За допомогою операції + ми можемо приєднати до одного тексту інший, причому продовження може розташовуватися на наступному рядку. Щоб під час виведення тексту відбувалося перенесення наступного рядка, застосовується послідовність \n.
Результат виконання цього коду:
Ось думка, якій весь я відданий, Підсумок всього, що скупчив розум. Лише той, ким бій за життя звіданий, Життя та свободу заслужив.
Текстові блоки, які з'явилися в JDK15, дозволяють спростити написання багаторядкового тексту:
String text = """ Ось думка, якій весь я відданий, Підсумок всього, що розум накопичив. Лише той, ким бій за життя звіданий, Життя і свободу заслужив. """; System.out.println(text);
Весь текстовий блок обертається в потрійні лапки, при цьому не потрібно використовувати з'єднання рядків або послідовність для їх перенесення. Результат виконання програми буде тим самим, що й у прикладі вище.
Які типи даних існують у програмуванні
Дані - базове поняття програмування. Це будь-яка інформація у формалізованому вигляді, яку здатний розуміти комп'ютер. Розкажемо, які типи даних у програмуванні.
- Що таке тип даних, навіщо він потрібний
- Які бувають типи даних
- Цілочисельні
- Дробові числа
- Рядкові
- Бульові значення
- Символи
- Масиви
- Функція
- Типи даних у Python
- Типи даних JavaScript
- Слабка та сильна
- Статична та динамічна
- Явна та неявна
Що таке тип даних, навіщо він потрібний
Типи даних - одна з основних концепцій програмування. Саме вони визначають характеристики змінних та вказують, які операції можна виконувати з тими чи іншими даними.
У кожній з мов програмування є свій набір певних типів даних, які можна застосовувати для зберігання інформації.
Для того, щоб комп'ютер міг правильно інтерпретувати інформацію та виконувати завдання, які йому пропонує розробник, він повинен розуміти, з чим конкретно працює. На це йому вказує тип даних.
Пам'ять комп'ютера можна уявити у вигляді складу, де окремі змінні — це коробки, у яких зберігають вміст, а тип даних — наклейки ними, у яких зазначено, що саме сюди можна класти і з цим взаємодіяти.
Типи даних потрібні для того, щоб:
- Забезпечити коректну роботу ПЗ. Якщо ви задає тип даних для тієї чи іншої змінної, програма розумітиме, як з ними працювати. Це дозволяє уникнути помилок, пов'язаних з невідповідністю типів даних.
- Оптимізувати ресурси. У пам'яті комп'ютера кожен із типів даних займає певну кількість місця.Якщо вибрати їх правильно, обсяг потрібних ресурсів буде мінімальним, а якщо використовувати типи даних неправильно, то програма вимагатиме максимальних ресурсів.
- Писати зрозумілий код. Типи даних вказують на те, яку інформацію зберігають та як її можна застосовувати. За рахунок наявності програмістам простіше орієнтуватися в написаному коді.
- Забезпечувати безпеку. За рахунок типів даних програми можуть правильно застосовувати обмеження щодо використання інформації. А це зменшує вразливість.
- Освойте ази сучасних мов програмування
- Вивчіть роботу з Git та командним рядком
- Виберіть собі професію або покращіть навички
Які бувають типи даних
Типи даних у програмуванні бувають декількох видів - більшість із них зустрічаються у всіх мовах. Але є деякі специфічні, про них ми поговоримо пізніше.
Цілочисельні
Цей тип даних включає змінні, в яких зберігають цілі числа. З ними можна робити математичні операції: додавання, віднімання, поділ та множення. Але якщо після цього виходить дробове число, то багато мов програмування його округлять.
Є кілька видів цілочисельних даних:
Int - в ньому зберігають цілі числа від -2147483648 до 2147483647. На нього в пам'яті припадає 4 байти.
short int - те ж саме, але в обмежених значеннях. Туди входять числа від -32768 до 32767. На нього відводять у пам'яті 2 байти.
long int - для чисел більше int.
Діапазони значень можуть залежати від мови програмування.
Дробові числа
Цей вид даних у програмуванні використовують для зберігання дробових чисел. З ними можна проводити як математичні, а й алгебраїчні операції.
Через особливості зберігання дробових чисел можуть призводити до похибок при обчисленні.
Є кілька типів дробових даних:
- Float – 32-бітні, вони мають точність до 7 цифр.
- Double - 64-бітові з точністю до 15-16 цифр.
- Decimal – 128-бітові, з точністю до 28-29 цифр, зазвичай їх застосовують для фінансових операцій.
Рядкові
Рядки або string — тип даних із набором символом, що мають різне текстове значення. Простіше кажучи, в більшості випадків це просто текст, який прийнято поміщати в лапки.
До нього можуть входити літери, знаки та цифри. Останні, у разі, комп'ютер не сприймає як числа. Рядки можуть бути змінними і незмінними залежно від того, якою мовою програмування пишуть код.
З рядками можна виконувати кілька операцій.
Наприклад, шукати підрядок, тобто певний набір символів, що міститься у рядку. Таким чином, можна виділити одне слово або його частину.
Також стосовно цього типу даних доступна конкатенація або склеювання рядків. Тобто додавання одного тексту чи набору символів — інший.
У типових мовах дозволяється складати рядок з числом. Це відбувається шляхом автоматичного переведення одного типу даних до іншого.
Бульові значення
Їх позначають як bool або boolean. Це званий логічний тип даних. Вони мають лише два значення: false – брехня або true – істина.
Булеві значення застосовують у програмах прийняття рішень з урахуванням тієї чи іншої інформації. Скажімо, якщо необхідно перевірити істинність утвердження та на його основі вчинити якусь дію.
Також вони видаються як відповідь, коли програма порівнює між собою дві змінні або під час перевірки входження будь-якого елемента в безліч.
Символи
Символи — тип даних у програмуванні, призначений для зберігання одного символу у певному кодуванні. До них відносяться літери, цифри, розділові знаки та спеціальні символи. Кожен має свій унікальний код, який визначається стандартами кодування, такими як ASCII або Unicode.
У мовах програмування символи часто використовуються для роботи з текстовою інформацією. Їх зберігають у змінній Char. А застосовують для відображення тексту на екрані, виконання операцій над рядками або звернення до одного певного знака рядка.
Символи займають зазвичай 1 або 2 байти пам'яті, що дозволяє компактно зберігати та обробляти їх. Також дані цього застосовують для створення спеціальних символьних констант, які полегшують розуміння коду і роблять його читаним.
У деяких мовах програмування символи можуть бути представлені у вигляді символьних літералів, укладених у одинарні лапки, наприклад 'A' або '$'.
Масиви
Це складніший тип даних у програмуванні. Масив чи array – найпопулярніша структура. Він складається з набору значень, в якому можна зберігати набір елементів одного типу (рідше за кілька) під одним ім'ям.
У масиві кожне із значень нумерують індексом, що починається з нуля. Масиви можуть бути фіксованими за довжиною або динамічними залежно від мови програмування.
Використання масивів дозволяє ефективніше отримувати доступ до окремих елементів та змінювати їх значення. Вони передбачають порівняно прості методи роботи з даними: видалення, додавання чи модифікації.
Функція
Цей тип даних складається з інструкції або набору дій комп'ютера. Його також поміщають у певну змінну. Функція зберігає в собі певний код.Їй можна передати значення та отримати результат, який також можна записати в іншу змінну.
У мовах програмування цей тип даних використовують, викликаючи функцію за назвою, а дужках після назви пишуть дані, які хочуть передати.
Нюанси типів даних посилань
Посилальні типи даних відрізняються від примітивних тим, що змінні типів посилань зберігають не самі дані, а посилання на них у пам'яті. Якщо пояснити максимально просто, такий тип даних схожий на візитку. У ній зазначено посилання на адресу, де зберігають конкретний об'єкт.
Через посилальну змінну можна взаємодіяти з нею. Зокрема через них об'єкту задають певні значення. До типів посилань відносяться, наприклад, масиви.
Значення без типу
У мовах програмування є кілька значень, які не можна зарахувати до жодного виду даних. Вони всі не містять інформації, але роблять це по-різному.
- Null це не нуль, тому що цифра нуль щось означає. Null – це значення, яке позначає порожнечу;
- NaN - значення, в якому немає числа. Така помилка, коли в ході математичної операції не вдалося отримати певної відповіді.
Приклади видів даних у програмуванні
Наведені вище типи даних підтримують більшість мов програмування. Але також є інші, специфічні.
Типи даних у Python
Ця мова програмування має стандартні види: числові, булеві, рядки. А є специфічні:
- Списки — колекції елементів, куди входять об'єкти з різним типом даних;
- Словники - колекції, що включають ключі з пар і значень;
- Кортежі – впорядковані колекції елементів, які не можна змінювати.
Типи даних JavaScript
У цій мові програмування, крім стандартних видів, застосовуються і порівняно рідкісні. Наприклад:
- Symbol – тип даних, які використовують для створення унікальних ідентифікаторів;
- Set - структури з безліччю унікальних значень;
- BigInt - тип даних для роботи з цілими числами довільної довжини;
- Undefined – відсутність значення. Таке буде у змінної, де немає даних.
Особливості типізації даних
Процес визначення типів даних називають типізацією. За рахунок неї мова програмування розуміє, як ідентифікувати дані та що з ними можна робити.
У всіх популярних мов програмування є типізація даних, але вона працює по-різному.
Слабка та сильна
Типізацію можна умовно розділити на два типи:
- Сильна. У таких мовах не можна змішувати у виразах різні типи, у яких також виконуються автоматичні неявні перетворення. Тобто скласти два числа можна, а масив із числом – не можна. Сильна типізація реалізована в Java та Python.
- Слабка. Мови з нею виконують безліч неявних змін автоматично, що може призвести до неоднозначності. Слабка типізація реалізована JavaScript.
Мови зі слабкою типізацією приваблюють своєю небагатослівністю. Код на них при рівній функціональності записуватиметься коротше, відповідно, писати такими мовами програмування легше. Їх вважають більш простими вивчення.
Але сильна типізація має свої переваги. Вона дає більше визначеності та залишає менше простору для помилок. Таким чином, код виходить більш надійним і його легше оптимізувати для більш швидкої роботи.
Статична та динамічна
У мовах програмування тип даних може надаватися або у процесі виконання коду, або під час компіляції.Так виникає ще два види типізації.
- Статична. При ній тип даних визначається процесі компіляції. У мовах програмування, які підтримують, типи даних змінювати не можна. Вони задаються раз і назавжди. Це зменшує кількість помилок. Приклад мов програмування зі статичною типізацією – Java та C#.
- Динамічний. У ній тип даних визначається лише етапі виконання програми. У мовах програмування з динамічною типізацією написання коду є більш гнучкий процес, але надійність у таких програм менша. Приклад мов з динамічною типізацією - JavaScript та Python.
При статичній типізації перевірка типів проводиться тільки один раз, а значить програмісту не потрібно буде постійно з'ясовувати, чи все гаразд із даними. За рахунок цього код такими мовами програмування виконується швидше.
Деякі помилки, допущені розробником, можна виявити на стадії компіляції.
У динамічної типізації теж є переваги. У ній простіше створювати універсальні колекції, програмісту не потрібно думати про типи даних. Це дозволяє писати код швидше.
До того ж мови програмування з динамічною типізацією банально простіші у вивченні.
Явна та неявна
Типи даних у мовах програмування можна вказувати по-різному. За цим параметром типізація буває:
- Явний. У цьому випадку програміст самостійно під час створення змінної прописує, який тип даних вона міститиме. Це реалізовано у таких мовах як С++ та С#.
- Неявною. У цьому випадку мова програмування автоматично підбирає потрібний тип, виходячи з того значення, яке поклав змінну розробник. Також цей процес може відбуватися під час компіляції. До мов з неявною типізацією входять JavaScript і PHP.
Явна типізація передбачає суворішу перевірку даних, яка дозволяє заздалегідь виявити помилки в коді. Також структура програми більш зрозуміла як її автора, так інших розробників, оскільки всі типи даних у ній вже вказані. Це підвищує читабельність коду.
Але й недоліки у явної типізації теж є: щоразу вказувати тип даних банально довше, а сам код стає багатослівнішим. За підтримки це виливається в те, що програміст змушений вручну оновлювати типи даних.
Неявна типізація дозволяє писати код швидше і робить його лаконічнішим, а процес рефакторингу спрощується. Але помилки у ньому важче виявляти, у своїй знижується читабельність.
Відсутність типу даних
Усі популярні у комерційній розробці мови програмування – типізовані. Але так не завжди. І досі залишилися безтипові мови програмування. Більшість із них належать до мов з низьким рівнем абстракції.
Вони дані не ділять на типи, а сама інформація представлена у вигляді наборів. Писати код такими мовами програмування дуже складно та його відрізняє низька читабельність. Тобто, без коментарів проблематично зрозуміти значення.
Безтиповими мовами створюють програми для мікроконтролерів, низькорівневі програми та компілятори. Прикладом такої мови є Assembler.
- Освойте ази сучасних мов програмування
- Вивчіть роботу з Git та командним рядком
- Виберіть собі професію або покращіть навички