Не могу поверить, что никто не упомянул, что я считаю самой важной причиной: «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 и безымянные классы.
person
CromTheDestroyer
schedule
13.04.2011
new IntegeR(5) == new Integer(5)
по правилам должен оцениваться как false. - person biziclop   schedule 05.03.2011.equals()
штука действительно заставляет меня хуже думать о Java. - person Oleh Prypin   schedule 05.03.2011new
, он всегда создает новый объект. Вы запросили новый объект, и вы получите новый объект. - person NullUserException   schedule 09.05.2014class biziclip
, и моей поспешно сделанной правкой до истечения пятиминутного окна. - person corsiKa   schedule 09.05.2014