Для списка на Java нужно ли приводить примитивный long к Long перед его добавлением?

#java #list #arraylist #casting

#java #Список #arraylist #Кастинг

Вопрос:

Если List<Long> list у вас есть, нужно ли приводить примитивные длинные значения к Long ?

Обязательно ли это делать

long l = -1;
list.add( (Long) l);

или будет

list.add(l);

все в порядке и не вызывает никаких исключений / ошибок?

Комментарии:

1. Что происходит, когда вы пробуете это сделать?

2. давай, конечно, быстрее просто попробовать, чем просить ТАК?

3. Если вам нужно знать, почему нам не нужно приводить, тогда прочитайте об автоматической упаковке и автоматической распаковке.

4. вам нужно узнать о примитивах, классах-оболочках, автоматической упаковке и распаковке в java.

5. Я знал о классах-оболочках, но я не знал, что существует такая вещь, как автоупаковка и распаковка, спасибо!

Ответ №1:

Я предполагаю, что ваша версия java> 1.5, поскольку вы использовали общий список.

Так что в вашем случае list.add(l); будет работать

Не бойтесь пробовать такие вещи на своем локальном компьютере.

Подробнее читайте здесь: Автоупаковка и распаковка

Ответ №2:

Нет, вы этого не сделаете, int примитивы будут автоматически заблокированы

Ответ №3:

Нет необходимости приводить примитивный тип long к объекту Long , компилятор класса-оболочки позаботится об этом. Это называется автобоксингом.

Как говорит JavaDoc: Автобоксинг — это автоматическое преобразование, которое компилятор Java выполняет между примитивными типами и их соответствующими классами-оболочками объектов. Например, преобразование int в целое число, double в Double и так далее. Если преобразование идет другим путем, это называется распаковкой .. Пожалуйста, обратитесь

Рассмотрим следующий код:

 List<Integer> list = new ArrayList<>();
for (int i = 1; i < 50; i  = 2)
    list.add(i);
  

Хотя вы добавляете значения int как примитивные типы, а не целочисленные объекты, в list , код компилируется. Поскольку list — это список целочисленных объектов, а не список значений int, вы можете задаться вопросом, почему компилятор Java не выдает ошибку времени компиляции. Компилятор не генерирует ошибку, потому что он создает целочисленный объект из i и добавляет объект в list . Таким образом, компилятор преобразует предыдущий код в следующий во время выполнения:

 List<Integer> list = new ArrayList<>();
for (int i = 1; i < 50; i  = 2)
    list.add(Integer.valueOf(i));