Intereting Posts
Параметры Hadoop не оказывают никакого эффекта (mapreduce.input.lineinputformat.linespermap, mapred.max.map.failures.percent) Я пытаюсь добавить массив JButton, который я добавил в панель на моем JFrame, но ничего не появляется Java – куча против прямого доступа к памяти Как я могу разместить макет прямо над экранной клавиатурой Android? конвертировать из булева в байт в java Одиночная нить задачи без очередей запросов Как правильно реализовать пользовательский список с изображениями с помощью библиотеки Picasso? JavaFX, переключение панелей в корневом окне и сохранение памяти Шифрование RSA: разница между Java и Android Какой смысл делать одиночный экземпляр volatile при использовании двойной блокировки? Указатели – уменьшение потребления памяти Есть ли более эффективный способ получить аннотированный метод? Как добавить данные в существующий файл паркета Почему я получаю ошибку «Файл не может быть разрешен к типу»? JUnit4 fail () здесь, но где pass ()?

следует избегать автобоксинга в Java

Я хочу спросить, следует ли избегать autoboxing в Java. Поскольку существуют случаи, когда метод ожидает примитивный тип «double», и вы передаете объект «Double» в качестве параметра, следует ли это избегать, поскольку компилятор распаковывает ваш переданный объект и может быть тяжелым?

Это то, что Java Notes говорит об автобоксинге :

Предпочитают примитивные типы

Используйте примитивные типы, где нет необходимости в объектах по двум причинам.

  1. Примитивные типы могут быть намного быстрее, чем соответствующие типы оберток, и никогда не замедляются.
  2. Неизменяемость (не может быть изменена после создания) типов обертки может сделать их использование невозможным.
  3. Могут быть некоторые неожиданные действия, связанные с == (сравнение ссылок) и .equals () (сравнение значений). См. Приведенную ниже ссылку.

Эмпирическое правило: всегда используйте примитивы, если это возможно.

Бывают случаи, когда это невозможно, например, коллекции, поэтому используйте только обертки.

Это выбор дизайна, а не тривиальный ответ для каждого случая.

На ваше решение может повлиять несколько вопросов:

Преимущества:

  • Авто-бокс и авто-распаковка могут сделать ваш код более удобным для чтения:

    Оставляя все ненужные .doubleValue() и Double.valueOf() уменьшает визуальный шум и может сделать ваш код более легким для чтения.

  • Авто-бокс позволяет вам легко использовать коллекции примитивных значений (например, List , …)

Недостатки:

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

    Например, если у вас есть API, который возвращает double и другой API, которые ожидают double , но вы обрабатываете значение как Double между ними, тогда вы делаете бесполезный авто-бокс.

  • auto-unboxing может ввести NullPointerException где вы этого не ожидаете:

     public void frobnicate(Double d) { double result = d / 2; // ... } 
  • с использованием наборов значений с автоматическим короблением использует гораздо больше памяти, чем сопоставимый double[] например.

Вам не нужно избегать автобоксинга, если говорить о производительности, JVM должен это обработать. Единственное, что вы должны учитывать, это читаемость вашего кода.

Следует избегать использования автобоксинга. Это может привести к ошибкам из-за перегрузки и имеет некоторое влияние на производительность. Тем не менее это может не быть проблемой в вашем приложении. Но имейте в виду воздействие.

Здесь мое сообщение: https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/