
Введение в Autoboxing и Unboxing в Java
Автобокс - это автоматическое преобразование, которое Java-компилятор выполняет между примитивными типами и их соответствующими классами-обертками объектов, т.е. преобразование из int в Integer, double в Double и т. Д. Распаковка - это автоматическое преобразование из объектов класса-оболочки в их эквивалентные примитивы, т. Е. Integer в int и т. д. Эта функция была введена в версии 1.5 java, autoboxing и unboxing, так как это автоматические процессы, обрабатываемые JRE, наиболее важным моментом здесь является написание правильного кода, который не добавляет чрезмерных ненужных объектов на рисунке.
Теперь давайте обсудим, как Autoboxing и Unboxing в Java идут внутренне -
- Компилятор использует метод valueOf () для преобразования примитивов в соответствующие объекты-обертки (то есть для автоматической блокировки) внутри, в обратном случае он использует intValue (), doubleValue () и т. Д., Например, парадигмы для распаковки.
 - Для справки, отображение оболочки и примитивов в Java упоминается ниже -
 
| Примитивный тип | Класс Wrapper | 
| логический | логический | 
| байт | Байт | 
| голец | символ | 
| поплавок | терка | 
| ИНТ | целое число | 
| длинная | Длинная | 
| короткая | короткий | 
| двойной | двойной | 
Примеры -
- Давайте возьмем ArrayList из Integers, а затем воспользуемся концепцией распаковки -
 
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, поскольку многие промежуточные объекты Integer будут созданы и будут уничтожены (для последующей сборки мусора), поэтому может возникнуть замедление, поэтому с такой логикой следует обращаться осторожно.
 - Давайте теперь посмотрим на условия, отличные от общего восприятия, и будем иметь некоторый код, в котором очень важно понимать автобокс и распаковку -
 
Рассмотрите фрагмент, размещенный ниже, как вы думаете, что будет результатом этого?
public class Main
(
public static void main(String() args) (
Integer m = 34123;
Integer x = 34123;
System.out.println(x==m);
)
)
- Если вы говорите «true», то вы «false», потому что вывод также «false», это потому, что мы можем сравнивать только целочисленный диапазон от -128 до 127, как это, для значений, выходящих из этого диапазона, они должны быть распакованный.
 - Следовательно, нам нужно сравнить intValue () вышеупомянутых целых чисел, а пока компилятор делает это, используя свойство valueOf ().
 - Вероятно, если это попадет в диапазон, указанный выше, то приведенный выше код будет иметь значение true, поскольку сначала он будет ссылаться на целочисленный литеральный пул для сравнения.
 
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, чтобы получить вывод выше.
- Следовательно, вышеупомянутое поведение ясно говорит о том, что метод автобокса широко используется в концепциях перегрузки и должен использоваться с осторожностью при кодировании.
 
Преимущества Autoboxing и Unboxing в Java-
- Соответствующее преобразование выполняется компилятором автоматически.
 - Разработчик должен писать меньше кода и, следовательно, более чистый код.
 - Нет необходимости в ручном приведении типов.
 
Вывод
Мы увидели сценарий использования автобоксирования и распаковки, насколько неявна эта концепция и где она может создавать плюсы и минусы. Он должен использоваться с осторожностью при кодировании, иначе он может добавить ненужные накладные расходы на вычислительное преобразование, поэтому преобразования должны выполняться в примитивах, чтобы избежать чрезмерных затрат на сборку мусора и чрезмерного создания временных объектов. Мы также видели случай использования автоматической коробки с концепцией перегрузки Java, вы можете проверить еще несколько ограничений вместе с этим.
Рекомендуемые статьи
Это было руководство по Autoboxing и Unboxing в Java. Здесь мы также обсудим, что такое Autoboxing и Unboxing в Java? как это работает внутри с некоторыми примерами кодов? Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -
- Что такое JDBC?
 - Что такое Generics в Java?
 - Groovy против Java
 - Что такое наследование Java?
 - Примеры и как работают дженерики в C #
 - JRE против JVM | Топ 8 отличий с (Инфографика)