Причина, по которой Integer может иметь значение null, а int - нет, заключается в том, что Integer является полноценным Java-объектом со всеми накладными расходами, которые включают. В этом есть ценность, так как вы можете написать
Integer foo = new Integer();
foo = null;
, что хорошо для того, чтобы сказать, что foo будет иметь значение, но пока нет.
Другое отличие состоит в том, что int
не выполняет вычисления переполнения. Например,
int bar = Integer.MAX_VALUE;
bar++;
будет весело увеличивать полосу, и в результате вы получите очень отрицательное число, которое, вероятно, не то, что вы изначально предполагали.
foo = Integer.MAX_VALUE;
foo++;
будет жаловаться, что, я думаю, будет лучшим поведением.
И последнее замечание: Integer, будучи Java-объектом, несет в себе пространство над объектом. Я думаю, что кому-то еще может понадобиться здесь, но я полагаю, что каждый объект потребляет 12 байтов для служебных данных, а затем пространство для самого хранилища данных. Если вам не хватает производительности и пространства, мне интересно, является ли Integer правильным решением.