Я не могу поверить, что никто не упомянул, что я думаю, что это самая важная причина: «int» так гораздо проще набрать, чем «Integer». Я думаю, что люди недооценивают важность краткого синтаксиса. Производительность на самом деле не является причиной для того, чтобы их избегать, потому что большую часть времени, когда кто-либо использует числа, находится в индексах цикла, а увеличение и сравнение этих значений ничего не стоит в любом нетривиальном цикле (независимо от того, используете ли вы int или Integer).
Другая причина заключалась в том, что вы можете получить NPE, но этого очень просто избежать с помощью коробочных типов (и этого гарантированно избежать, если вы всегда инициализируете их ненулевыми значениями).
Другая причина заключалась в том, что (new Long (1000)) == (new Long (1000)) имеет значение false, но это просто еще один способ сказать, что «.equals» не имеет синтаксической поддержки коробочных типов (в отличие от операторов <,> , = и т. д.), поэтому мы возвращаемся к причине «более простого синтаксиса».
Я думаю, что пример непримитивного цикла Стива Йегге очень хорошо иллюстрирует мою точку зрения:
http://sites.google.com/site/steveyegge2/language-trickery-and-ejb
Подумайте об этом: как часто вы используете типы функций в языках, которые имеют хороший синтаксис для них (например, любой функциональный язык, python, ruby и даже C) по сравнению с Java, где вы должны имитировать их с помощью интерфейсов, таких как Runnable и Callable, и безымянные занятия.