Ich kann nicht glauben, dass niemand erwähnt hat, was meiner Meinung nach der wichtigste Grund ist: "int" ist so viel einfacher zu tippen als "Integer". Ich denke, die Leute unterschätzen die Wichtigkeit einer prägnanten Syntax. Die Leistung ist nicht wirklich ein Grund, sie zu vermeiden, da die meiste Zeit, wenn man Zahlen verwendet, in Schleifenindizes liegt und das Inkrementieren und Vergleichen dieser Kosten in keiner nicht trivialen Schleife (unabhängig davon, ob Sie int oder Integer verwenden) nichts kostet.
Der andere gegebene Grund war, dass Sie NPEs erhalten können, aber das ist mit Boxed-Typen extrem einfach zu vermeiden (und es wird garantiert vermieden, solange Sie sie immer mit Nicht-Null-Werten initialisieren).
Der andere Grund war, dass (new Long (1000)) == (new Long (1000)) falsch ist, aber das ist nur eine andere Art zu sagen, dass ".equals" keine syntaktische Unterstützung für Boxed-Typen hat (im Gegensatz zu den Operatoren <,>) , =, etc), also kommen wir zurück zum Grund der "einfacheren Syntax".
Ich denke, Steve Yegges nicht-primitives Loop-Beispiel veranschaulicht meinen Standpunkt sehr gut:
http://sites.google.com/site/steveyegge2/language-trickery-and-ejb
Denken Sie darüber nach: Wie oft verwenden Sie Funktionstypen in Sprachen, die eine gute Syntax für sie haben (wie jede funktionale Sprache, Python, Ruby und sogar C), im Vergleich zu Java, wo Sie sie mithilfe von Schnittstellen wie Runnable und Callable und simulieren müssen namenlose Klassen.