Подтвердить что ты не робот

Java-примитивные типы: int vs. Integer

Я путаюсь, когда использовать Java в примитивных и не примитивных (?) типах (т.е. int vs. Integer). Я понимаю, что в некоторых местах вы не можете использовать примитивные типы (например, при использовании generics). Но как насчет "нормального" кода? Существует ли ограничение производительности для использования не-примитивных типов? Как насчет работы с Android?

*** Мой вопрос очень похож на этот question, который был обнаружен одним из плакатов ниже. Ответы на связанный вопрос дают дополнительную информацию по этому вопросу, которые не рассматриваются ниже.

*** "непримитивные" типы официально называются ссылочными типами.

4b9b3361

Ответ 1

Короткий ответ: int - это число; a Integer - это указатель, который может ссылаться на объект, содержащий число. Использование Integer для арифметики предполагает большее количество циклов процессора и потребляет больше памяти. int не является объектом и не может передаваться ни одному методу, который требует объектов (так же, как то, что вы сказали о Generics).

Ответ 2

Непримитивные типы - это объекты. Они должны быть динамически распределены, собраны мусор и проверены на отсутствие (хотя некоторые из этих операций могут быть удалены оптимизирующим компилятором). Для чтения их фактического значения требуется загрузка с указателя. Примитивные типы - это значения. Обычно они занимают меньше места и быстрее доступны.

Хорошим правилом является использование примитивных типов, если вам не нужен полиморфизм, и в этом случае используйте соответствующий объект.

Ответ 4

Как пурист OO, вы, вероятно, вообще избегаете примитивов и бремя производительности и отсутствия постфиксных операторов. (Да, есть стоимость исполнения.) Вы также можете использовать этот подход просто из соображений расширяемости в качестве дизайнера (не обязательно быть повисшим от чистоты.)

Как практический вопрос (вне теоретических и эстетических вопросов), используйте примитивы везде, где можете, и используйте версию объекта, где вы не можете использовать примитивы. (Вы уже упоминали один такой случай. Язык и API будут принимать это решение.)

Как урод производительности, вы, вероятно, избегаете версий объектов, и вам может не понравиться слишком много, если вы нажмете на несколько золотых правил OO и неприкосновенный отказ: производительность короля, и вы принимаете свои решения соответствующим образом.

Я бы рекомендовал вариант 2 как хорошее место для начала, пока вы не разработали свои собственные догматические предпочтения!:)

Ответ 5

My view: использование Integer в качестве параметров или возвращаемых значений позволяет одну вещь, которую не допускают примитивные ints: Использование null. Но разве это хорошая идея? Я думаю, что это редко бывает.

Что касается производительности: компилятор в какой-то степени оптимизирует ваш код, поэтому большую часть времени это не представляет реальной проблемы.