В Java основные типы данных обрабатываются по-другому, поэтому появляются классы-оболочки, в которых играют роль два компонента, в частности автоупаковка и распаковка. Термин «автоупаковка» описывает процесс преобразования примитивного значения в объект базового класса-оболочки. При автоупаковке компилятор Java автоматически выполняет преобразование между примитивными типами и классами-оболочками объектов, которые им соответствуют. Целое число в целое, двойное в двойное и так далее и тому подобное. Если преобразование идет в обратном направлении, это называется распаковкой.
Курс Разработка серверной части Java может улучшить ваши навыки.
Вот простейший пример автобокса
Символ ch обозначает букву a. В остальных примерах этого раздела используются дженерики. См. лекцию Generics (Updated), если вы еще не знакомы с общим синтаксисом.
Вот пример кода
Например, преобразование int в класс Integer. Компилятор Java реализует автоупаковку, когда примитивное значение:
List‹Integer› li = new ArrayList‹›();
для (целое я = 1; я ‹ 50; я += 2)
li.добавить(я);
Даже если значения int добавляются к li как базовые типы, а не как объекты Integer, код все равно может быть успешно скомпилирован. Вам может быть интересно, почему компилятор Java не выдает ошибку времени компиляции, поскольку li — это не список значений int, а список объектов Integer. Из-за того, что он создает объект Integer из I, а затем добавляет этот объект в li, компилятор не сообщает об ошибке. Поэтому приведенный выше код преобразуется компилятором в следующий во время выполнения:
List‹Integer› li = new ArrayList‹›();
для (целое я = 1; я ‹ 50; я += 2)
li.add(Integer.valueOf(i));
- Передается в качестве параметра методу, который ожидает объект соответствующей информации о классе-оболочке.
- Назначается переменной соответствующего класса-оболочки.
С другой стороны, распаковка относится к превращению элемента типа-оболочки в его эквивалентное примитивное значение. В качестве примера рассмотрим преобразование из int в int. Компилятор Java применяет распаковку, когда объект класса-оболочки:
- Объект этого базового типа отправляется методу, который его ожидает.
- Присваивается переменной соответствующего примитивного типа.
Теперь давайте рассмотрим несколько преимуществ автоматической упаковки и распаковки, чтобы понять, почему мы их используем.
- Более чистый код проще понять благодаря автоупаковке и распаковке.
- Этот метод устраняет необходимость приведения типов при работе с базовыми типами и объектами класса Wrapper.
Стоимость курса Java-разработчика может достигать 60 000 индийских рупий.
Преобразование примитивного значения (например, int) в объект соответствующего класса-оболочки (Integer) называется автоупаковкой. Компилятор Java реализует автоупаковку, когда примитивное значение:
- Передается как параметр методу, который ожидает объект соответствующего класса-оболочки.
- Назначается переменной соответствующего класса-оболочки.
Рассмотрим следующий метод
public static int sumEven(List‹Integer›li) {
целая сумма = 0;
для (Целое число i: li)
if (i % 2 == 0)
сумма += я;
сумма возврата;
}
Вы можете быть озадачены тем, как компилятор Java смог правильно сгенерировать метод, учитывая, что объекты Integer не содержат операторов остатка (процентов) или унарного сложения (+=). Поскольку он использует метод intValue для преобразования целого числа в целое во время работы программы, компилятор не выдает ошибку при запуске:
public static int sumEven(List‹Integer›li) {
целая сумма = 0;
для (целое число i : li)
если (i.intValue() % 2 == 0)
сумма += i.intValue();
сумма возврата;
}
Преобразование элемента типа-оболочки (Integer) в его эквивалентное примитивное значение (int) называется распаковкой. Компилятор Java реализует распаковку, когда объект класса-оболочки
· Объект этого базового типа отправляется методу, который его ожидает.
· Присваивается переменной соответствующего примитивного типа.
Это показано в следующем сценарии распаковки:
· импортировать java.util.ArrayList;
· импортировать java.util.List;
· публичный класс Распаковка
Курс разработки Java может быть полезен для получения более глубоких знаний по этому предмету.