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

Почему автоматический бокс отмечен как предупреждение?

Я понимаю, что авто-бокс должен быть сделан с осторожностью, потому что ссылка, которая находится в коробке, может быть нулевой. Почему авто-бокс отмечен как предупреждение? Есть ли какие-то подводные камни, которые мне не хватает здесь?

4b9b3361

Ответ 1

Если вы не ожидаете проблем с производительностью (с точки зрения микрооптимизации), вы можете безопасно отключить это предупреждение. Это всего лишь указание на случай, если вы не знаете, что здесь происходит автобокс. В коде бизнес-логики, где у вас есть издержки ввода-вывода (из-за транзакций с БД или доступа к диску), автобокс вряд ли станет проблемой производительности

Ответ 2

Я собирался отключить это предупреждение Eclipse, но следующая статья заставила меня подумать об этом. Я все еще не совсем уверен, но мне кажется, что это могут быть веские причины, чтобы просто избегать автобоксинга.

https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/

Ответ 3

Автобокс может помочь разработчику создать ошибку, связанную с методом "удаления" коллекций, хотя это, вероятно, довольно неясная ошибка.

Я столкнулся с этой ошибкой, когда использовал генератор случайных чисел для выбора индекса элемента, который необходимо удалить из ArrayList. Генератор возвратил длинный примитив, который я случайно попытался использовать в качестве параметра для List.remove(int index). Компилятор преобразовал long в Long и использовал его в List.remove(Object o), который дал совершенно другое поведение. К счастью, утверждение assert быстро уловило ошибку.

Согласно этому обсуждению этой проблемы с "удалить", кто-то еще столкнулся с подобной проблемой, где их int неожиданно действовал как Integer, хотя я не понимаю, как это произошло. Почему коллекции Java не удаляют методы общего характера? (см. комментарий ScArcher2)