Програмування: Java. Типи даних

Програмування: Java. Типи даних

Тип даних визначається трьома складовими:

  • набором значень або об 'єктів;
  • набором операцій, які можуть бути застосовані до всіх значень у наборі;
  • поданням даних, що визначає їх зберігання.

Які типи даних у Java?

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


У Java типи даних поділяються на примітивні та посилальні.

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

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

Мова Java. Типи даних: час і дата

Складові дані поділяються на класи, інтерфейси та масиви. Членами інтерфейсного типу є абстрактні методи і константи. У мові Java типи даних дата і час задаються конструктором Date ():

  • d = new Date().

Прикладом посилання також є рядок.

Мова Java. Типи даних: String

Рядок - це клас, визначений у бібліотеці Java, його можна використовувати для роботи з текстом (послідовністю символів).


Оголошення посилальної String-змінної наступне: String str.

Перед тим як присвоїти посилання на об 'єкт такої змінної, необхідно створити його за допомогою оператора new. Наприклад, можна створити об 'єкт класу String з текстом "Привіт":

  • str = new String ("" Привіт ").

Що відбувається при виконанні цього коду? По-перше, виділяється пам 'ять, і ім' я str пов 'язується з цією коміркою пам' яті. Це не відрізняється від оголошення примітивної змінної. Другий фрагмент коду створює в пам 'яті об' єкт String з текстом "Привіт" і зберігає посилання на нього (або адресу пам 'яті) в str.

Посилальні типи даних Java також дозволяють присвоїти посилання на об 'єкт, що зберігається в одній змінній, іншій. Обидві вони посилаються на один і той же об 'єкт в пам' яті. Це може бути досягнуто наступним чином:

  • String str1;
  • String str2;
  • str1 = new String ("" Привіт ");
  • str2 = str1;

Існує постійне посилання null, яке може бути присвоєно будь-якій посилальній змінній. Вона не посилається на жоден об 'єкт.

Об 'єкт String створюється за допомогою оператора new. Але оскільки рядки використовуються часто, є більш простий спосіб його створення. Всі рядкові літерали, тобто послідовність символів, укладена в подвійні лапки, розглядаються як об 'єкти String. Тому замість оператора new можна використовувати рядкові літерали:

  • String str1 = ""Hello"".

Примітивні типи даних Java - byte, short, int, long, char, float, double і boolean. Вони діляться на дві категорії: логічну і числову. Остання може бути розділена на цілі числа і числа з плаваючою точкою.


Цілі типи даних Java є числовими типами, значення яких є цілими числами. Їх п 'ять: byte, short, int, long и char.

Int

Int - це 32-розрядний знаковий примітивний тип даних. Змінна займає 32 біти пам 'яті. Допустимий діапазон - від -2147483648 до 2147483647 (-231 до 231 - 1). Всі цілі числа в цьому діапазоні є цілочисельними літералами або константами. Наприклад, 10, -200, 0, 30, 19 є літералами int. Їх можна присвоїти змінній int:

  • int num1 = 21;

Цілі літерали можуть бути виражені у вигляді двійкового, вісімкового, десяткового і шістнадцяткового числа.

Коли літерал починається з нуля і має принаймні дві цифри, він вважається записаним у вісімковому форматі. 0 і 00 представляють однакове значення - нуль.

Всі літерали int у форматі шістнадцяткового числа починаються з 0x або 0x, і вони повинні містити хоча б одну шістнадцяткову цифру:


  • int num1 = 0x123.

Int-літерали у форматі двоїчного числа починаються з 0b або 0B:

  • int num1 = 0b10101.

Long

Це 64-розрядний знаковий примітивний тип. Використовується, коли результат обчислень може перевищувати діапазон int. Діапазон long - від -263 до 263- 1. Всі цілі числа цього діапазону є літералами довгого типу.

Щоб відрізняти в мові Java типи даних int і long, літерал останнього типу завжди закінчується L або l.

Цілі літерали довгого типу також можуть бути виражені у вісімковому, шістнадцятковому і двійковому форматах.

Коли long-літерал присвоюється змінній long, компілятор Java перевіряє присвоюване значення і засвідчується, що воно знаходиться в прийнятному діапазоні; інакше трапиться помилка компіляції.


Оскільки діапазон int менший за long, значення int-змінної завжди може бути присвоєно змінній типу long. Але зворотне присвоєння неможливо навіть у межах діапазону int. Для цього використовується явна вказівка:

  • num1 = (int) num2;

Byte

Byte являє собою 8-розрядний цілий примітивний тип. Його діапазон - від -128 до 127 (-27 до 27 - 1). Це найменший цілий тип Java. Як правило, байтові змінні використовуються, коли в програмі задіяно багато значень в діапазоні від -128 до 127, або при роботі з бінарними даними. На відміну від літералів int і long, byte-літерали відсутні. Тим не менш можна призначити byte-змінною будь-який int-літерал, оскільки він перекриває діапазон байту.

Якщо значення змінної виходить за межі діапазону, Java видасть помилку компілятора.

Крім того, можна присвоїти тільки int-літерал, але не значення, що зберігається в змінній int, так як при цьому можлива втрата точності. Для цього потрібно явне приведення типу.

  • b1 = (byte) num1.

Short

Це 16-розрядний знаковий цілий примітивний тип даних. Його діапазон - від -32768 до 32767 (або -215 до 215 - 1).


Як правило, потреба в коротких змінних виникає, коли програма використовує велику кількість значень, які не перевищують зазначений діапазон. Short-літерал відсутній, але можливе присвоєння будь-якого літералу int в межах діапазону short. Значення byte-змінної може бути присвоєно завжди. Інші правила присвоєння int або long short-змінної такі ж, як для byte.

Char

Char є 16-розрядним беззнаковим примітивним типом даних, який представляє символ Юнікода. Відсутність знака означає, що змінна не може мати негативне значення. Діапазон - від 0 до 65535, що збігається з кодуванням набору символів Юнікода. Літерал представляє значення char і може бути виражений в таких формах:

  • символ, укладений в одинарні лапки;
  • послідовність керуючих символів;
  • послідовність керуючих символів юнікоду;
  • послідовність вісімкових символів керування.

Символ може бути виражений шляхом укладення його в одинарні лапки: char C1 = 'A'. Подвійні лапки позначають рядковий літерал, який не може бути присвоєний char-змінній, навіть якщо рядок складається тільки з одного символу. Це неприпустимо, оскільки посилання примітивної змінної не присвоюється. Всі рядкові літерали є об 'єктами класу String і, отже, посиланнями, тоді як символьні відносяться до примітивного типу.

Літерал, виражений послідовністю керування, записується у вигляді зворотної косої межі з символом в одиночних лапках. Всього їх 8: ‘\n’, ‘\r’, ‘\f’, ‘\b’, ‘\t’, ‘\\’, ‘\”’, ‘\’’.

Керуюча юнікод-послідовність має вигляд '\uxxx ', де\u (зворотний шар, за яким слідує рядкова u) позначає її початок, а хххх представляє рівно чотири шістнадцяткові цифри коду символу в системі Юнікод. Наприклад, 'A' має значення 65 в десятковій системі і 41 в шістнадцятковій. Таким чином, цей символ може бути представлений як '\u0041 '.

Вісімкова керуюча послідовність записується у вигляді '\nnn ', де n - вісімкова цифра (0-7). Діапазон значень - від '\000 'до '\377', де 3778 відповідає 25510. Тому вона використовується для представлення символів з кодом від 0 до 255, необхідного для сумісності з іншими мовами програмування. На відміну від юнікод-послідовності, де необхідні всі чотири шістнадцяткові цифри, тут можна використовувати 1, 2 або 3 вісімкові: '\n ', '\nn' або '\nnn '.

Логічний тип

Boolean має лише два дійсних значення: true (істина) і false (брехня). Вони називаються булевими літералами. Логічна змінна не може бути приведена до іншого типу і навпаки. Java не визначає розмір boolean - він залежить від конкретної реалізації віртуальної Java- машини.

Типи даних Java з плаваючою точкою

Число, яке містить дробову частину, в пам 'яті комп' ютера може зберігатися в поданні з фіксованою кількістю цифр до і після точки або з зазначенням її положення. Оскільки кількість цифр може змінюватися, то кажуть, що точка "плаває".

У мові Java типи даних з плаваючою точкою використовують 32 біти. Згідно зі стандартом IEEE 754, це відповідає одинарній точності, яка дозволяє представляти, наприклад, числа 1,4 х 10-45 і 3,4 х 1038, причому як позитивні, так і негативні.

Всі дійсні числа, які закінчуються на f або F, називаються float-літералами. Вони можуть бути представлені у форматі десяткового числа і у вигляді наукової нотації. Наприклад:

  • float f1 = 3.25F;
  • float f2 = 32.5E-1F;
  • float f3= 0.325E + 1F.

Тип визначає два нуля: + 0.0F (або 0.0F) і -0.0F. Однак для цілей порівняння обидва нулі вважаються рівними. Крім того, ним визначено два види нескінченності: позитивна і негативна. Результати деяких операцій (наприклад, поділ 0.0F на 0.0F) не визначені і представлені спеціальним значенням NaN.

Подвійна точність

Для зберігання чисел з плаваючою точкою double використовує 64 біти. Число подвійної точності може представляти позитивні і від 'ємні значення величиною 4,9 х 10-324 і 1,7 х 10308.

Всі дійсні числа за замовчуванням є подвійними літералами. За бажанням можуть явно позначатися суфіксом d або D, наприклад, 19.27d. Подвійний літерал може бути виражений у десятковій формі і в науковій нотації.