
Въведение в Autoboxing и Unboxing в Java
Автобоксирането е автоматичното преобразуване, което Java компилаторът прави между примитивните типове и съответните им класове за обвиване на обекти, т.е. преобразуване от int в Integer, двойно в Double и т.н. Unboxing е автоматичното преобразуване от обекти на клас обвивка в техните еквивалентни примитиви, т.е. Integer to int и др. Тази функция е въведена във версия 1.5 на java, автобоксиране и дебоксиране, както са автоматичните процеси, обработвани от JRE, най-важният момент тук е да напишете правилен код, който не добавя излишни ненужни обекти в снимката.
Сега нека да обсъдим как Autoboxing и Unboxing в Java върви вътрешно -
- Компилаторът използва метода valueOf (), за да преобразува примитиви в съответните обекти за обвиване (т.е. автобоксиране) вътре, в обратния случай използва intValue (), doubleValue () и т.н. като парадигми за дебоксиране.
 - За справка, картографирането на опаковката и примитивите в Java е споменато по-долу -
 
| Примитивен тип | Клас за опаковане | 
| булева | Булева | 
| байт | байт | 
| овъглявам | характер | 
| поплавък | поплавък | 
| инт | цяло число | 
| дълго | дълго | 
| къс | Къс | 
| двойно | двойно | 
Примери -
- Нека сега вземем 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“ се добавя към опаковката “ сума ".
 - Оттук може да се установи, че първо ще се извърши преобразуване от обвивка в примитивна, тъй като операторът "+" работи само върху примитиви, и следователно първо ще се разблокира обекта, след това ще се извърши изчислението, след това отново ще се извърши автобоксирането на обекти и след това стойността ще бъде присвоена на променливата „сума“.
 - Това представя ненужни режийни разходи върху JVM, тъй като много междинни цели цели ще бъдат създадени и ще бъдат унищожени (за да бъдат събрани по-късно боклук), като по този начин може да се появи забавяне, така че с такива логики трябва да се работи внимателно.
 - Нека да видим сега условия, различни от общите схващания и ще имаме някакъв код, при който автобоксирането и дебоксирането стават много важни, за да бъдат разбрани -
 
Помислете фрагмента, поставен по-долу, какво мислите ще бъде резултатът от това?
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 присъстват в буквалния пул.
Autoboxing и Unboxing в 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, за да имате горепосочения изход.
- Следователно по-горе поведението ясно показва, че техниката на автобоксинг има значително използване при концепциите за претоварване и тя трябва да се използва внимателно при кодирането.
 
Предимства на Autoboxing и Unboxing в Java-
- Подходящото преобразуване се извършва автоматично от компилатора.
 - Предполага се, че разработчикът ще напише по-малък код и по този начин по-чист код.
 - Няма нужда от ръчно изрази за леене на тип.
 
заключение
Видяхме случай на използване на автобоксиране и дебоксиране, колко неявна е тази концепция и къде може да създаде плюсове и минуси. Трябва да се използва внимателно, докато кодира, в противен случай може да добави ненужни изчислителни конверсии, така че преобразуванията се извършват в примитивите, за да се избегне прекомерното събиране на боклук и наднорменото създаване на временни обекти. Видяхме и случай на използване на автобоксиране с концепцията за претоварване на java, можете да проверите още няколко ограничения заедно с това.
Препоръчителни статии
Това е ръководство за Автобоксиране и Дебоксиране в Java. Тук също обсъждаме Какво е Автобокс и Unboxing в Java? как работи вътрешно с някои примерни кодове? Можете да разгледате и другите ни предложени статии, за да научите повече -
- Какво е JDBC?
 - Какво е Generics в Java?
 - Groovy срещу Java
 - Какво е наследяване на Java?
 - Примери и как генериците работят в C #
 - JRE срещу JVM | Топ 8 разлики с (Инфографика)