В чем разница между int и Integer в Java?

«В чем разница между int и Integer в Java?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  • int — примитивный тип данных. Хранит целочисленное значение (32 бита), занимает меньше памяти, операции с ним быстрее. Не может иметь значение null.
  • Integer — класс-обертка (wrapper) для int. Это полноценный объект, который может быть null, предоставляет полезные методы (например, Integer.parseInt() или Integer.compare()) и необходим для использования в дженериках (коллекциях).

Пример из практики тестирования:

// Примитив — для вычислений в тестах производительности
int expectedResponseTime = 200; // мс
int actualResponseTime = getResponseTime();
assert actualResponseTime < expectedResponseTime;

// Обертка — когда значение может отсутствовать (например, необязательный параметр в ответе API)
Integer optionalUserId = parseUserIdFromJson(response); // Может вернуть null
if (optionalUserId != null) {
    // Выполняем проверки, зависящие от userId
    assert userDatabase.contains(optionalUserId);
}

// Автоупаковка (autoboxing) и распаковка (unboxing) работают автоматически
List<Integer> userIds = Arrays.asList(1, 2, 3, null); // Коллекции работают только с объектами
int firstId = userIds.get(0); // Автоматическая распаковка Integer в int

Когда что использовать в QA-контексте:

  • int — для счетчиков, проверок циклов, любых внутренних вычислений в тестах, где null не нужен.
  • Integer — для работы с данными из внешних источников (JSON, БД, API), где поле может отсутствовать или быть null, а также при использовании коллекций (List<Integer>, Map<Integer, ...>).