0Pricing
Java Academy · Урок

Автоупаковка и распаковка

Правила автоматического преобразования

«Автоупаковка и распаковка» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Автоматическое преобразование

Автоматическая упаковка — это автоматическое преобразование Java примитива в объект-обёртку. Автоматическая распаковка — обратная операция, превращающая обёртку обратно в примитив.

Это происходит незаметно, поэтому Вы можете смешивать оба мира без явных вызовов преобразования.

Упаковка в действии

Присваивание значения int переменной типа Integer запускает автоматическую упаковку. Компилятор сам вставляет вызов Integer.valueOf.

public class Main {
    public static void main(String[] args) {
        int primitive = 42;
        Integer boxed = primitive;
        System.out.println(boxed);
    }
}

Распаковка в действии

Присваивание значения Integer переменной типа int запускает автоматическую распаковку. Компилятор незаметно вставляет вызов intValue.

public class Main {
    public static void main(String[] args) {
        Integer boxed = 99;
        int primitive = boxed;
        System.out.println(primitive);
    }
}

Упаковка в коллекциях

Чаще всего автоматическую упаковку можно увидеть при добавлении примитивов в коллекцию. Вы пишете list.add(5), а Java автоматически упаковывает значение 5 в объект Integer.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        int first = nums.get(0);
        System.out.println(first);
    }
}

Арифметика выполняет распаковку

Когда Вы используете арифметические операторы над объектами-обёртками, Java сначала распаковывает их в примитивы, выполняет вычисление, а затем при необходимости снова упаковывает результат.

Ниже два значения Integer складываются после распаковки обоих значений.

public class Main {
    public static void main(String[] args) {
        Integer a = 10;
        Integer b = 32;
        int sum = a + b;
        System.out.println(sum);
    }
}

Смешивание примитивов и обёрток

Вы можете свободно смешивать примитив и обёртку в выражении. Java распаковывает обёртку, поэтому во время вычисления обе части становятся примитивами.

public class Main {
    public static void main(String[] args) {
        Integer wrapped = 7;
        int raw = 3;
        int product = wrapped * raw;
        System.out.println(product);
    }
}

Упаковка при вызове методов

Автоматическая упаковка применяется и к аргументам методов. Метод, ожидающий Object или обёртку, может получить примитив, а Java упакует его при передаче.

public class Main {
    static void show(Object value) {
        System.out.println("Got: " + value);
    }

    public static void main(String[] args) {
        show(123);
        show(true);
    }
}

Скрытая цена

Автоматическая упаковка удобна, но не бесплатна. Каждая упаковка создаёт объект, а часто выполняемые циклы могут создавать миллионы недолговечных объектов.

В числовых циклах, критичных для производительности, работайте непосредственно с примитивами, а не с обёртками.

public class Main {
    public static void main(String[] args) {
        long total = 0;
        for (int i = 0; i < 5; i++) {
            total += i;
        }
        System.out.println(total);
    }
}

valueOf и создание объектов

Автоматическая упаковка использует Integer.valueOf, который кэширует небольшие значения от -128 до 127. Вызов new Integer(...) всегда создаёт новый объект и теперь считается устаревшим.

Предпочитайте автоматическую упаковку, позволяя ей выполнять свою работу.

public class Main {
    public static void main(String[] args) {
        Integer cached = Integer.valueOf(50);
        System.out.println(cached);
    }
}

Тернарный оператор и упаковка

Есть тонкое правило: в тернарном выражении, если одна ветвь содержит примитив, а другая — обёртку, Java может распаковать оба значения до общего примитивного типа.

В большинстве случаев это безопасно, но помните, что так могут запускаться преобразования, которых Вы не ожидали.

public class Main {
    public static void main(String[] args) {
        boolean flag = true;
        Integer result = flag ? 1 : 2;
        System.out.println(result);
    }
}

Когда это помогает

Автоматическая упаковка нужна, чтобы код оставался понятным при смешивании примитивов с обобщениями и коллекциями. При разумном использовании она устраняет лишние детали. При неосторожном использовании в часто выполняемых циклах она ухудшает производительность.

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили правила автоматической упаковки.

Итоги

Вы узнали, как работают автоматическая упаковка и распаковка:

  • Автоматическая упаковка превращает примитив в обёртку с помощью valueOf
  • Автоматическая распаковка превращает обёртку обратно в примитив с помощью методов вроде intValue
  • Это происходит при присваивании, работе с коллекциями, арифметических операциях и вызовах методов
  • Это удобно, но создаёт объекты, поэтому избегайте автоматической упаковки в часто выполняемых циклах

Часто задаваемые вопросы

Урок «Автоупаковка и распаковка» бесплатный?

Да — полный текст урока «Автоупаковка и распаковка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Автоупаковка и распаковка»?

Правила автоматического преобразования Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Автоупаковка и распаковка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Примитивные типы и типы-обёртки
  2. Автоупаковка и распаковка
  3. Разбор и valueOf
  4. Подводные камни автоупаковки
← Назад к Java Academy