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