Увод у Аутобокинг и Унбокинг на Јави

Аутоматско бокирање је аутоматска конверзија коју Јава компајлер прави између примитивних типова и одговарајућих класа омота објеката, тј. Претварање из инт у Интегер, двоструко у Доубле и сл. Унбокинг је аутоматско претварање из предмета класе омотача у њихове еквивалентне примитиве, тј. Интегер то инт итд. Ова карактеристика је уведена у верзији 1.5 Јава, аутоматског боксирања и одпакирања, као што су аутоматски процеси које ЈРЕ управља, а најважнија тачка овде је писање правилног кода који не додаје прекомерне непотребне предмете на слици.

Сада разговарајмо о томе како Аутобок и Унбокинг у Јави иду интерно -

  • Компајлер користи вредност валуеОф () за интерно претварање примитива у одговарајуће објекте омотача (тј. Аутоматско кутирање), у супротном случају користи интВалуе (), доублеВалуе () итд. Као парадигме за одбацивање.
  • За референцу, мапирање омота и примитива у јави споменуто је доље -
Примитивни типКласа омотача
боолеанБоолеан
бајтБајт
цхарЦхарацтер
пловакПловак
интИнтегер
дугоДуго
кратакКратак
дуплоДвокреветна

Примери -

  • Узмимо АрраиЛист оф Интегерс сада, а затим искористимо концепт унбокинга -

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);
)
)

  • Дакле, у горњем примеру, док додајемо вредност к, видимо да је к примитиван, па се овде распакирање аутоматски дешава док се овај задатак обавља.

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 у овом контексту, где је представљен типичан сценарио. Ако сте упознати са стварањем објекта у Јави, можете видети да „Интегер сум = 0“ декларише објект, а када радимо израчун унутар петље фор, тада можемо видети да се примитивна вредност „и“ додаје у омотач “ сума “.
  • Дакле, прво се може догодити претварање из омота у примитивни, јер "+" оператор ради само на примитивима, па ће се најпре деситирати одбацивање објекта, затим рачунање, затим поновно аутоматско слање предмета, а затим вредност ће се доделити променљивој „суми“.
  • Ово представља непотребне надземне трошкове ЈВМ-а, јер ће се створити многи интермедијарни објекти и уништити (касније се скупљати смеће), па ће се успорити, па се с таквом логиком треба поступати пажљиво.
  • Погледајмо сада услове другачије од општих схватања и имаћемо неки код где ће аутобокс и унбокинг бити веома важни за разумевање -

Размотрите исјечак постављен испод, шта мислите шта ће бити резултат овога?

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

  • Ако кажете „тачно“, онда сте „лажни“, јер је излаз такође „лажан“, то је зато што можемо упоредити само цели опсег од -128 до 127 овако, за вредности које излазе из овог опсега оне треба да буду без кутије.
  • Стога морамо упоређивати интВалуе () горе наведених Интегерса, за сада, преводилац чини ово учињено користећи својство валуеОф ().
  • Вероватно, ако ово падне у горе наведеном распону, горе наведени код дат ће тачно, јер ће се прво упоредити са целим буквалним базеном ради поређења.

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

То ће се проценити на „истинску“ вредност, јер је 100 присутно у буквалном базену.

Аутобокинг и Унбокинг у Јави са преоптерећењем метода

  • Пре него што означимо аутоматско пребацивање и дебоксирање на преоптерећење метода, претпоставља се да је читалац упознат са концептом преоптерећења методе, ми ћемо само дати мало увида и за више, погледајте документацију Орацле-а о истом.
  • Преоптерећење метода је процес у којем се користи исти назив методе са различитим бројем улазних аргумената, различитим типовима података променљивих са истим именима итд., Који се уопште користе за представљање више варијанти било које методе рачунања.
  • Узмимо пример да исти то схватимо дубље и представићемо и резултат који се овог пута појављује на слици -

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

Напомена - горњи програм можете извршити у било којем од ИДЕ-а да бисте имали горе постављени излаз.

  • Отуда горе наведено понашање јасно говори да техника аутобоксирања има значајну употребу у концептима преоптерећења те ће се с опрезом користити кодирањем.

Предности аутоматског боксирања и унбокинга на Јава-

  • Компајлер аутоматски врши одговарајућу конверзију.
  • Програмер треба да напише мањи код и тиме чистији код.
  • Нема потребе за ручним изразима за лијевање типа.

Закључак

Видели смо како се користи аутобокинг и унбокинг, колико је овај концепт имплицитан и где може створити предности и недостатке. Морате се пажљиво користити приликом кодирања, јер у противном може сакупити непотребне рачунске конверзије, тако да се конверзије обављају у примитивима како би се избегло прекомерно прикупљање смећа и превелико привремено стварање предмета. Такође смо видели случај употребе аутоматског боксирања са концептом преоптерећења Јава, уз ово можете проверити још неколико ограничења.

Препоручени чланци

Ово је водич за Аутобокинг и Унбокинг на Јави. Овде такође расправљамо о томе Шта је аутоматско боксање и унбокинг у Јава? како се интерно ради са неким узорцима кодова? Можете и да прођете кроз друге наше предложене чланке да бисте сазнали више -

  1. Шта је ЈДБЦ?
  2. Шта је генерика у Јави?
  3. Гроови вс Јава
  4. Шта је наслеђивање Јава?
  5. Примери и како генеричари раде у Ц #
  6. ЈРЕ вс ЈВМ | Топ 8 разлика са (Инфограпхицс)

Категорија: