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

Ответ

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