Автоупакування та авторозпакування у виразах та операторі switch. Використання автоупакування та авторозпакування значень для типів boolean та char
Зміст
- 1. Автоупакування та авторозпакування у виразах. Особливості реалізації
- 2. Приклади автоупакування та авторозпакування у виразах
- 3. Приклади автоупакування та авторозпакування в операторі switch
- 4. Автоупакування та авторозпакування значень між типами boolean та Boolean. Особливості застосування
- 5. Автоупакування та авторозпакування значень між типами char та Character
- Споріднені теми
Пошук на інших ресурсах:
1. Автоупакування та авторозпакування у виразах. Особливості реалізації
Автоупакування та авторозпакування виконуються у виразах у випадках, коли потрібно взаємне перетворення значення примітивного типу та відповідного об’єкту типу оболонки.
Якщо числове значення є упакованим в об’єкт типу оболонки, то при використанні в виразах, що містять операції (+, –, *, ++, — і т.д.) це значення попередньо розпаковується.
Також значення об’єкту типу оболонки розпаковується при його використанні в операторі switch.
Допускається виконувати операції у виразах над упакованими об’єктами різних типів оболонок (Integer, Double, Float тощо).
⇑
2. Приклади автоупакування та авторозпакування у виразах
2.1. Бінарна операція +
Приклад показує процес розпакування при додаванні двох значень, що є об’єктами типів оболонок. За подібним принципом працюють інші операції -, *, /, % тощо.
// Автоупакування та авторозпакування у виразах // 1. Бінарна операція + Double objD1, objD2; Double resD; objD1 = 25.5; // упакування Double <= double objD2 = 30.5; // упакування Double <= double // 2. Операція додавання. // 2.1. Розпакування objD1, objD2. // 2.2. Обчислення суми 25.5+30.5 => 56.0 // 2.3. Упакування 56.0 => Double resD = objD1 + objD2;
У вищенаведеному прикладі в рядку
resD = objD1 + objD2;
виконується наступна послідовність дій:
- розпаковуються об’єкти objD1 та objD2 та отримуються значення 25.5 та 30.5 примітивного типу double;
- обчислюється сума для примітивного типу double;
- результат обчислення суми упаковується в об’єкт resD.
⇑
2.2. Інкремент ++
Приклад показує використання операції інкременту для об’єкту типу оболонки. Такий самий принцип виконання здійснюється при використання операції декременту —.
// Автоупакування та авторозпакування у виразах // Операція інкременту ++ // 1. Оголошення змінної Integer objI = 40; // упакування Integer <= int // 2. Виклик оператора ++ // 2.1. Розпакування значення 40 в тип int // 2.2. Приріст значення int на 1, отримується 41 // 2.3. Упакування значення 41 в оболонку Integer objI++;
У вищенаведеному прикладі в рядку
objI++;
виконуються наступні дії:
- спочатку значення об’єкту objI розпаковується;
- відбувається приріст на 1 значення об’єкту objI. У результаті об’єкт objI має значення 41;
- результат упаковується в оболонку Integer.
⇑
3. Приклади автоупакування та авторозпакування в операторі switch
У прикладі демонструється використання процесу авторозпакування в операторі switch. Введений день тижня має тип-оболонку Integer. В операторі switch цей день тижня виступає керуючим виразом. Під час порівняння в операторах case відбувається автоматичне розпакування з типу Integer в тип int.
import java.util.Scanner; public class TrainAutoPacking { public static void main(String[] args) { // Автоупакування та авторозпакування в операторі switch // 1. Ввести день тижня, який має тип Integer Scanner input = new Scanner(System.in); System.out.print("day = "); Integer dayWeek = input.nextInt(); // 2. Використання типу Integer як керуючого виразу в операторі switch // Тут відбувається розпакування значення об'єкту dayWeek в значення типу int switch (dayWeek) { case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; case 3: System.out.println("Wednesday"); break; case 4: System.out.println("Thursday"); break; case 5: System.out.println("Friday"); break; case 6: System.out.println("Saturday"); break; case 7: System.out.println("Sunday"); break; default: System.out.println("Incorrect day"); } input.close(); } }
⇑
4. Автоупакування та авторозпакування значень між типами boolean та Boolean. Особливості застосування
Процес автоупакування та авторозпакування для логічного типу використовується, коли потрібне взаємне конвертування між примітивним типом boolean та типом-оболонкою Boolean. Це конвертування може виникати в наступних випадках:
- при присвоєнні (=) змінній типу boolean об’єкту типу оболонки Boolean. У цьому випадку виконується авторозпакування (boolean <= Boolean);
- при присвоєнні (=) об’єкту типу оболонки Boolean значення змінної примітивного типу boolean. У цьому випадку відбувається автоупакування (Boolean <= boolean);
- в операторі умовного переходу if, якщо в якості умови використовується об’єкт типу-оболонки Boolean. У цьому випадку логічне значення автоматично розпаковується у тип boolean;
- в усіх операторах циклу for, while, do-while при умові, що в якості умови виконання ітерації використовується об’єкт типу оболонки Boolean. У цьому випадку відбувається авторозпакування об’єкту типу Boolean в примітивний тип boolean.
⇑
4.1. Використання в операторах присвоєння =
// Автоупакування та авторозпакування для типу Boolean // Автоупакування Boolean <= boolean Boolean objB = true; // Авторозпакування boolean <= Boolean boolean b = ! objB; // false
⇑
4.2. Використання в операторі умовного переходу if
// Автоупакування та авторозпакування для типу Boolean int x = 8; int y = 5; Boolean objB = x > y; // Авторозпакування значення об'єкту objB: Boolean => boolean if (objB) System.out.println("x > y"); else System.out.println("x < y");
⇑
4.3. Використання в операторах циклу for, while, do-while
У прикладі демонструється використання об’єкту типу-оболонки Boolean в операторах циклу for, while, do-while. При перевірці умови, що визначає виконання наступної ітерації циклу, відбувається процес розпакування значення об’єкту-оболонки типу Boolean в примітивний тип boolean.
import java.util.Scanner; public class TrainAutoPacking { public static void main(String[] args) { // Автоупакування та авторозпакування для типу Boolean. // Використання в циклах for, while, do-while // 1. Цикл for. Обчислення суми s = 1 + 2 + ... + 10 int i = 1; Boolean objB = i<=10; int s = 0; // Розпакування значення objB: Boolean => boolean for (; objB; i++) { s += i; // формування результату умови objB = i<10; } System.out.println("s = " + s); // 2. Цикл while. Обчислення суми 2 + 4 + 6 + ... + 100 s = 0; i = 0; objB = i<=100; // Авторозпакування objB: Boolean => boolean while (objB) { s += i; i += 2; objB = i<=100; } System.out.println("s = " + s); // 3. Цикл do-while. // Задача. Обчислити суму чисел, введених з клавіатури. // Кінець вводу - число 0. Scanner input = new Scanner(System.in); int number; System.out.println("Input numbers:"); s = 0; do { number = input.nextInt(); // ввести число s += number; // збільшити суму objB = number != 0; // сформувати умову } while (objB); // автоматичне розпакування Boolean => boolean System.out.println("s = " + s); } }
Результат роботи програми
s = 55 s = 2550 Input numbers: 5 8 -3 4 0 s = 14
⇑
5. Автоупакування та авторозпакування значень між типами char та Character
Для типу char також виконуються процеси автоупакування та авторозпакування.
Приклад. У прикладі демонструються процеси взаємного автоупакування та авторозпакування типів char та Character для операції присвоєння (=) та оператора switch.
public class TrainAutoPacking { public static void main(String[] args) { // Автоупакування та авторозпакування для типів char та Character. // 1. В операторі присвоєння Character objC = 'z'; // автоупакування Character <= char char c = objC; // авторозпакування char <= Character // 2. В операторі switch objC = '+'; // тут відбувається авторозпакування objC в тип char switch (objC) { case '+': System.out.println("Addition"); break; case '-': System.out.println("Substraction"); break; case '*': System.out.println("Multiplication"); break; case '/': System.out.println("Division"); break; default: System.out.println("Undefined operation"); } } }
⇑
Споріднені теми
- Типи даних Java. Примітивні типи. Типи-оболонки
- Автоупакування та авторозпакування. Загальні поняття. Використання при присвоєнні (=) та в методах. Приклади
⇑