В каком случае вы должны использовать примитив
типы (int
) или ссылочные типы
(Integer
)
Как правило, я буду использовать примитив (например, int
), если только мне не придется использовать класс, который обертывает примитив.
В одном из случаев необходимо использовать класс-оболочку, например Integer
, в случае использования generics , поскольку Java не поддерживает использование примитивных типов в качестве параметров типа:
List<int> intList = new ArrayList<int>(); // Not allowed.
List<Integer> integerList = new ArrayList<Integer>(); // Allowed.
И, во многих случаях, я воспользуюсь автоматической коробкой и распаковкой , поэтому мне не нужно явно выполнять преобразования из примитивов в класс-обертку и наоборот:
// Autoboxing will turn "1", "2", "3" into Integers from ints.
List<Integer> numbers = Arrays.asList(1, 2, 3);
int sum = 0;
// Integers from the "numbers" List is unboxed into ints.
for (int number : numbers) {
sum += number;
}
Кроме того, в качестве дополнительного примечания, при преобразовании из примитивов в объекты класса-оболочки, когда уникальные экземпляры объектов не нужны, используйте метод valueOf
, предоставленный методом-оболочкой, поскольку он выполняет кэширование и возвращает тот же экземпляр на определенное значение, уменьшив количество создаваемых объектов:
Integer i1 = Integer.valueOf(1); // Prefer this.
Integer i2 = new Integer(1); // Avoid if not necessary.
Для получения дополнительной информации о методах valueOf
, спецификация API для метода Integer.valueOf
может служить справочной информацией о том, как эти методы будут вести себя в классах-оболочках для примитивов.