Ответ
Это различие между примитивным типом и классом-оберткой, что критично для написания тестов, работы с коллекциями и обработки 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, ...>).
Ответ 18+ 🔞
Слушай, вот объясняю тебе как на пальцах, а то у некоторых в голове после этого объяснения проясняется, ёпта. Разница между int и Integer — это как между голым мужиком и мужиком в пальто. Один — просто тело, быстрый и легкий. Другой — объект, с карманами, где можно держать null вместо бутерброда.
int— это примитив, голые цифры. Быстрый, памяти жрёт мало, ноnullему не светит вообще. Он либо есть, либо ты ебёшься с дефолтным нулём.Integer— это уже класс, обёртка,хуй в пальто, если по-простому. Полноценный объект, может спокойно бытьnull, у него есть куча методов-прибамбасов, и без него в коллекциях — нихуя не получится.
Пример из жизни, чтобы вообще всё встало на свои места:
// int — для всяких быстрых проверок, где нахуй null не нужен
int expectedResponseTime = 200; // мс
int actualResponseTime = getResponseTime();
assert actualResponseTime < expectedResponseTime; // Быстро и чётко
// Integer — когда из какого-нибудь JSON'а может прийти пиздец, а не число
Integer optionalUserId = parseUserIdFromJson(response); // Может вернуть null, и это ок!
if (optionalUserId != null) { // Вот тут мы и ловим эту хитрожопую ситуацию
assert userDatabase.contains(optionalUserId);
}
// А вот тут магия автоупаковки/распаковки, просто ебушки-воробушки
List<Integer> userIds = Arrays.asList(1, 2, 3, null); // Коллекции — только объекты, чувак
int firstId = userIds.get(0); // Integer сам превратился в int, красота!
Короче, когда что брать:
int— для счётчиков, циклов, внутренней кухни теста. Гдеnull— это пиздец, а не вариант.Integer— когда тащишь данные извне (API, база, файл), где поле могло просто испариться, и для всех этихList-ов иMap-ов. Без него — никуда.