Ответ
Это различие между примитивным типом и классом-оберткой, что критично для написания тестов, работы с коллекциями и обработки 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, ...>).