Что такое автоупаковка и распаковка в Java?

Feb 19 2023
Autoboxing: Autoboxing — это функция в java, которая автоматически преобразует примитивный тип данных в соответствующий объект класса-оболочки. Например, преобразование int в Integer, double в Double и так далее.

Утобоксинг :

Автоупаковка — это функция в java, которая автоматически преобразует примитивный тип данных в соответствующий объект класса-оболочки. Например, преобразование int в Integer, double в Double и так далее.

Самый простой пример автобокса:

Символ ch = 'c'

где «c» — это примитивный тип (char), который автоматически преобразуется в соответствующий класс-оболочку (Character).

Где это может быть полезно во время практики кодирования?

Автоупаковка полезна со списком (например, ArrayList, LinkedList и т. д.). Возьмем пример ArrayList.

Как мы знаем, ArrayList содержит только объект, а не примитивный тип данных, что означает, что мы можем хранить объект класса-оболочки, но мы не можем хранить примитивный тип данных внутри ArrayList. Например, ArrayList<Integer> arr = new ArrayList<Integer>() ; это действительно. Но ArrayList<int> arr = new ArrayList<int>() ; это недействительно.

Рассмотрим фрагмент кода, написанный ниже.

Объяснение автобоксинга (рис. 1. а)

Хотя мы добавляем значения int как примитивный тип, а не объекты Integer, код успешно компилируется и не вызывает ошибки времени компиляции. Потому что компилятор JVM преобразует предыдущий код в следующий код:

Как компилятор преобразует код рис. 1.а во время компиляции (рис. 1.б)

Здесь преобразование примитивного типа int в класс-оболочку Integer во время операции добавления называется автоупаковкой.

Распаковка:

Распаковка — это функция в java, которая автоматически преобразует объект класса-оболочки в соответствующий примитивный тип данных. Например, преобразование Integer в int, Double в double и так далее.

Распаковка — это обратный процесс автоупаковки.

Где это может быть полезно во время практики кодирования?

Распаковка помогает программистам, так как упрощает выполнение некоторых операций, таких как арифметические операции со структурой данных, в которой хранится объект класса-оболочки, такой как список. Для примера:

Объяснение распаковки (рис. 2. а)

Несмотря на то, что значения, хранящиеся внутри списка (arr), имеют тип Integer, когда мы добавляем эти значения к переменной total типа int, значения Integer автоматически преобразуются в int. Это облегчит программисту выполнение арифметических операций.

Код успешно компилируется и не вызывает ошибки времени компиляции. Потому что компилятор JVM преобразует предыдущий код в следующий код:

Как компилятор преобразует код рис. 2.а во время компиляции (рис. 2.б)

Здесь преобразование int (примитивный тип) в Integer (объект класса Wrapper) называется распаковкой.

Следующая таблица полезна, так как показывает примитивный тип данных с соответствующим классом-оболочкой.

таблица связи между примитивным типом и классом-оболочкой