Использование int vs Integer
Я столкнулся с классом, используя переменные Integer, чтобы захватить размер, который будет использоваться в цикле for. Является ли это хорошей практикой или мы должны использовать тип примитивных данных int?
Integer size = something.getFields().size();
for (Integer j = 0; j < size - 1; ++j)
Ответы
Ответ 1
класс Integer предоставляется так, что значения могут быть помещены в коробку/распаковываться с использованием чистого OO-метода. используйте int, если это необходимо, если только вам не нужно использовать его способом OO; в этом случае Integer подходит.
Java Int vs Integer
Тем не менее, здесь очень разные вещи. Int - число; a > Целое число - это указатель, который может ссылаться на объект, содержащий число.
...
int не является объектом и не может передаваться ни одному методу, который требует объекты. Частным случаем является использование предоставленных классов сбора ( List, Map, Set) - хотя можно писать версии этих классы, которые предоставляют аналогичные возможности для версий объектов. часто требуются классы-оболочки (Integer, Double и т.д.) всякий раз, когда используется интроспекция (например, в API отражения).
Лучшее описание того, когда следует использовать один из них:
Выбор между int и Integer
Я начну с того, как эти типы следует использовать перед входом в подробно о том, почему.
- Предпочитает
int
по соображениям производительности - Методы, которые берут объекты (включая такие общие типы, как
List<T>
) неявно потребует использования Integer - Использование
Integer
относительно дешево для низких значений (от -128 до 127) из-за интернирования - используйте Integer.valueOf(int)
, а не новые Integer (int) - Не используйте
==
или !=
с целыми типами - Рассмотрите возможность использования
Integer
, когда вам нужно представить отсутствие значения (null) - Остерегайтесь unboxing Целочисленные значения для int с нулевыми значениями
Ответ 2
Если вы можете использовать int
, сделайте это. Если значение может быть null
или используется как объект, например. Дженерики, используйте Integer
Обычно неважно, какой из них вы используете, но часто int
выполняет немного лучше.
Ответ 3
Этот подход на практике не очень хорош, используйте int
, когда это возможно. Использование Integer
указывает, что эта конкретная переменная может быть null
(или она находилась внутри коллекции, проклятых дженериков...) - это не так.
Также использование Integer
вводит дополнительные накладные расходы на бокс и распаковку.
Ответ 4
Это потенциальное бедствие, ожидаемое в крупных проектах. Кодер здесь забыл, что каждый Integer фактически является новым объектом, и, чтобы использовать его как int, все время должен быть бокс и unboxing. Это не только неэффективно, но и не будет работать, как ожидалось. Лучше всего рекомендуется всегда использовать int, где это возможно, и использовать Integer только для размещения этих значений в списках, контейнерах или для хранения базы данных. Помните, что сравнение объектов с помощью > , < и == означает что-то еще, чем когда вы используете одни и те же операторы для сравнения примитивов.
Ответ 5
Не используйте его только для цикла. Используйте примитивный тип int (более высокая производительность), который не совпадает с классом Integer.
Класс Integer обертывает значение примитивного типа int в объект. Объект типа Integer содержит одно поле, тип которого is int.
Кроме того, этот класс предоставляет несколько методов преобразования int к String и String к int, а также к другим константам и методы, полезные при работе с int.
Итак, используйте Integer, если вам нужно вызвать функции Integer или вам нужно присвоить ему нулевое значение.
Вам также необходимо использовать Integer вместо int для таких дженериков, как List
Ответ 6
Когда вам нужно использовать объекты, вам нужно использовать классы Wrapper,
например, Integer, Double, Float и т.д.
например:
int n = Integer.parseInt("10");
Здесь мы преобразуем строку в целое (примитивный тип),
но метод parseInt (String str) работает только на классах Wrapper (т.е. Object),
поэтому мы использовали его... вы найдете гораздо больше пользы от него в java.
Ответ 7
В результате бокса и распаковки может быть штраф за выполнение, так как вы несете накладные расходы на конвертацию между примитивным и ссылочным типом.
Однако класс Integer добавляет дополнительные методы, которые могут быть очень полезными.
Ответ 8
Я обычно использую Integer из-за чисто OO. Производительность int определенно намного лучше, чем его объектная копия, но она заметна только тогда, когда вы зацикливаете миллионы раз в цикле.
IMHO, Если производительность имеет первостепенное значение в вашем приложении, и вы хотите сжать хотя бы одну nano секунду, тогда используйте int без какого-либо мозга. Но если OO и читаемость являются основными, то используйте Integer.
Ответ 9
Продвигать примитивные типы всегда там, где это возможно.
примитивные типы не могут использоваться как GenericArgument или null.