Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

19.Приведення типів у Java

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

Наприклад:

long a = 3;

a = 5 + 'A' + a;

print ("a =" + Math.round (a/2F));

Розглянемо, як у цьому прикладі компілятор встановлює тип кожного виразу і які перетворення (conversion) типів необхідно здійснити при кожній дії.

У першому рядку літерал 3 має тип за замовчуванням, тобто int. При присвоєнні цього значення змінної типу long необхідно провести перетворення.

У другому рядку спочатку здійснюється складання значень типу int і char. Другий аргумент буде перетворений так, щоб операція проводилася з точністю в 32 біта. Другий оператор складання знову зажадає перетворення, так як наявність змінної a збільшує точність до 64 біт.

У третьому рядку спочатку буде виконана операція ділення, для чого значення long треба буде привести до типу float, тому що другий операнд - дробовий літерал. Результат буде переданий в метод Math.round, який зробить математичне округлення і поверне цілочисельний результат типу int. Це значення необхідно перетворити в текст, щоб здійснити подальшу конкатенацію рядків. Як буде показано нижче, ця операція проводиться в два етапи - спочатку простий тип приводиться до об'єктному класу-"обгортці" (в даному випадку int до Integer), а потім у отриманого об'єкту викликається метод toString (), що дає перетворення до рядка.

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

Згадаймо вже розглянутий приклад:

int b = 1;

byte c = (byte)-b;

int i = c;

Тут у другому рядку необхідно провести явне перетворення, щоб привласнити значення типу int змінній типу byte. У третьому ж рядку зворотнє приведення проводиться автоматично, неявним для розробника чином.

Розглянемо спочатку, які переходи між різними типами можна здійснити.

Види привидів

У Java передбачено сім видів привидів:

тотожне (identity);

розширення примітивного типу (widening primitive);

звуження примітивного типу (narrowing primitive);

розширення об'єктного типу (widening reference);

звуження об'єктного типу (narrowing reference);

перетворення до рядка (String);

заборонені перетворення (forbidden).

20.Приведення примітивних типів даних. Примітивні типи Java поділяються на цілочислові(integer), дробові(floating-point) та булеві(boolean). Цілочислові типи

Цілочислові типи – це byte, short, int, long, також до них відносять й char. Перші чотири типи мають довжину 1,2, 4 і 8 байтів відповідно, довжина char – 2 байти, що безпосередньо випливає з того, що всі символиJ ava описуються стандартом Unicode. Над цілочисловими аргументами можна виконувати наступні операції:

операції порівняння (повертають булеві значення)

<, <=, >, >=

==, !=

числові операції (повертають числове значення)

унарні операції + і –

арифметичні операції +, -, *, /, %

операції інкременту и декременту (в префікс ній і постфікс ній формі) ++ і–

операції бітового зсуву <<, >>, >>>

бітові операції ~, &, |, ^

оператор з умовою ?:

оператор приведення типів

оператор конкатенації з рядком +

Дробові типи

Дробові типи – це float іdouble. Їх довжини – 4 і 8 байтів відповідно. Обидва типи знакові. В таблиці наведені їх характеристики:

Для цілочислових типів область значень задавалася верхньою і нижньою межами, досить близькими за абсолютною величиною. Для дробових добавляється ще одне обмеження – наскільки можна наблизитися до нуля, тобто – яке найменше додатне ненульове значення. Отже, неможливо задати літерал заздалегідь більший, ніж дозволяє тип даних, це зумовить помилку overflow. І не можна задати літерал, значення якого за модулем надто мале для даного типу, компілятор згенерує помилку underflow.

Булів тип

Булів тип представлений одним типом boolean, який може зберігати всього два можливих значення – true і false. Величини саме цього типу є результатом операцій порівняння.

Над булевими аргументами можна виконувати наступні операції:

операції порівняння (повертають булеве значення)

==, !=

логічні операції (повертають булеве значення)

!

&, |, ^

&&, ||

оператор з умовою ?:

оператор конкатенації з рядком +

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]