Введення в автоматичну коробку та розпакування на Java

Автобоксинг - це автоматичне перетворення, яке компілятор Java здійснює між примітивними типами та відповідними класами обгортки об'єктів, тобто перетворення з int в Integer, подвійне в Double та ін. Unboxing - це автоматичне перетворення з об'єктів класу обгортки в їх еквівалентні примітиви, тобто Integer to int і т. д. Ця функція була введена у версії 1.5 Java, автобоксингу та розпакування, як і автоматичні процеси, якими керує JRE, найважливішим моментом тут є написання належного коду, що не додає зайвих зайвих об’єктів у малюнок.

Тепер поговоримо про те, як функція автобоксингу та розпакування на Java проходить всередині -

  • Компілятор використовує метод valueOf () для перетворення примітивів у відповідні об’єкти обгортки (тобто автобоксинг) внутрішньо, у зворотному випадку він використовує параметри «intValue (), doubleValue () тощо», як парадигми для розпакування.
  • Для довідки, картографування обгортки та примітивів у Java наводиться нижче -
Первісний типКлас обгортки
булеваБулева
байтБайт
charХарактер
плаватиПоплавок
intЦілий
довгоДовго
короткийКороткий
подвійнийПодвійний

Приклади -

  • Давайте зараз візьмемо ArrayList of Integers, а потім скористаємося концепцією unboxing -

import java.util.ArrayList;
public class MyClass (
public static void main(String args()) (
ArrayList intlist = new ArrayList();
//wrapper Integer objects being added here
intlist.add(1);
interest.add(2);
//auto-unboxing is happening here
int x = intlist.get(0);
System.out.println(x);
)
)

  • Отже, у наведеному вище прикладі, додаючи значення x, ми бачимо, що x видається примітивним, тому розпакування тут відбувається автоматично, коли це завдання виконується.

public class MyClass (
public static void main(String args()) (
Integer sum =0;
for(int i=0;i<10;i++)
(
sum = sum + i;
)
System.out.println(sum);
)
)

  • Трохи вище ми показали приклад -2 у цьому контексті, де представлений типовий сценарій. Якщо ви знайомі зі створенням об'єктів у java, ви можете побачити, що "Integer sum = 0" оголошує об'єкт, і коли ми робимо обчислення всередині циклу for, то ми можемо побачити, що примітивне значення "i" додається в обгортку " сума ».
  • Отже, можна виявити, що спочатку відбудеться перетворення з обгорткової в примітивну, оскільки оператор "+" працює лише на примітивах, і, отже, спочатку відбудеться розпакування об'єкта, потім відбудеться обчислення, потім повторне повторне повторне автобоксінг об'єктів, а потім значення буде присвоєно змінній "сума".
  • Це створює непотрібні накладні витрати на СВМ, оскільки буде створено багато проміжних об'єктів цілочислення та їх знищення (щоб згодом збирати сміття), тим самим можна уповільнитись, тому з такою логікою слід поводитися обережно.
  • Давайте тепер подивимось умови, які відрізняються від загальних уявлень, і буде мати якийсь код, коли автобоксинг та розпакування стає дуже важливим для розуміння -

Розгляньте фрагмент, розміщений внизу, що, на вашу думку, буде результатом цього?

public class Main
(
public static void main(String() args) (
Integer m = 34123;
Integer x = 34123;
System.out.println(x==m);
)
)

  • Якщо ви говорите "вірно", то ви "помилкові", оскільки вихід також "хибний", це тому, що ми можемо порівняти лише цілий діапазон від -128 до 127, як це, для значень, що виходять з цього діапазону, вони повинні бути без коробки.
  • Отже, нам потрібно порівняти intValue () вищезгаданих Integers, оскільки зараз компілятор робить це зроблено, використовуючи властивість valueOf ().
  • Ймовірно, якщо це потрапить у цитований вище діапазон, то наведений вище код, як він є, буде істинним, оскільки спочатку буде для порівняння звернутися до цілого буквеного пулу.

public class Main
(
public static void main(String() args) (
Integer m = 100;
Integer x = 100;
System.out.println(x==m);
)
)

Це буде оцінено до "справжнього" значення, оскільки 100 є в прямому пулі.

Автобоксинг та Розпакування в Java з методом перевантаження

  • Перш ніж відзначити автобоксинг та розпакування для перевантаження методом, передбачається, що читач ознайомлений з концепцією перевантаження методу, ми просто дамо невелику інформацію та для отримання додаткової інформації зверніться до документації Oracle на те саме.
  • Перевантаження методу - це процес, коли однакова назва методу використовується з різною кількістю вхідних аргументів, різними типами даних змінних з однаковими іменами тощо, використовуючи для представлення кількох варіантів будь-якого методу обчислення в цілому.
  • Візьмемо приклад для того ж, щоб зрозуміти це глибше, і ми також подамо висновок, який з’являється на малюнку цього разу -

public class Main
(
public static void main(String() args) (
Overload obj = new Overload();
int i =5;
obj.printval(5);
Integer m = i;
obj.printval(m);
)
)
class Overload
(
public void printval(int i)
(
System.out.println("printing the unboxed value "+ i);
)
public void printval(Integer i)
(
System.out.println("printing the autoboxed value "+ i);
)
)

Вихід -

друк неосвоєного значення 5
друк автоматичного значення 5

Примітка. Ви можете виконати вищевказану програму в будь-якому з IDE, щоб мати вище розміщений вихід.

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

Переваги автоматичного боксу та розпакування в Java-

  • Відповідне перетворення здійснюється автоматично компілятором.
  • Розробник повинен записати менший код і тим самим очистити код.
  • Немає потреби в ручних виразів лиття типу.

Висновок

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

Рекомендовані статті

Це був посібник із автоматичного боксу та розпакування на Java. Тут ми також обговорюємо, що таке Автобоксинг та Unboxing у Java? як це працює внутрішньо з деякими зразками кодів? Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Що таке JDBC?
  2. Що таке дженерики на Java?
  3. Groovy vs Java
  4. Що таке спадщина Java?
  5. Приклади та як дженерики працюють у C #
  6. JRE проти JVM | 8 найкращих відмінностей (Інфографіка)