В некоторых случаях метод ожидает тип примитива double и вы передаете объект Double в качестве параметра.
double
Double
Поскольку компилятор распаковывает переданный объект, это увеличит использование памяти или уменьшит производительность?
Это то, что Java Notes говорит о autoboxing :
Предпочитают примитивные типы Используйте примитивные типы, где нет необходимости в объектах для двоих причины. Примитивные типы могут быть намного быстрее, чем соответствующая оболочка типы, и никогда не медленнее. неизменность (не может быть изменена после создания) оболочки типы могут сделать их использование невозможным. Может быть неожиданное поведение, связанное с == (сравните ссылки) и .equals () (сравнить значения). См ссылку ниже для примера.
Предпочитают примитивные типы
Используйте примитивные типы, где нет необходимости в объектах для двоих причины.
Практическое правило: всегда используйте примитивы, если это возможно.
В некоторых случаях это невозможно, например, в коллекциях, поэтому используйте обертки только тогда.
Это выбор дизайна, и нет тривиального ответа для каждого случая.
Есть несколько пунктов, которые могут повлиять на ваше решение:
Преимущества:
Автоматическая упаковка и автоматическая распаковка может сделать ваш код проще для чтения:
Оставляя все ненужные .doubleValue() иDouble.valueOf() уменьшает визуальный шум и может облегчить чтение вашего кода.
.doubleValue()
Double.valueOf()
Автобокс позволяет вам легко использовать наборы примитивных значений (таких как List<Double>, ...)
List<Double>
Недостатки:
чрезмерный, ненужный автоматический бокс и автоматическая распаковка может препятствовать вашей работе.
Например, если у вас есть API, который возвращает a double, и другой API, который ожидает a double, но вы обрабатываете значение как Двойной между ними, тогда вы делаете бесполезный автобокс.
автоматическая распаковка может ввести NullPointerException там, где вы этого не делаетеожидайте этого:
NullPointerException
public void frobnicate(Double d) { double result = d / 2; // ... }
при использовании наборов автоматически упакованных значений используется намного больше памяти, чем, например, в сопоставимом double[].
double[]
Вам не нужно избегать автобоксинга, если речь идет о производительности, JVM должна с этим справиться.Единственное, что вам следует учитывать - это удобочитаемость вашего кода.
Автобокс следует избегать. Это может привести к ошибкам из-за перегрузки и некоторому снижению производительности. Тем не менее, это не может быть проблемой в вашем приложении. Но помните о воздействии.
Вот мой пост к этому: https://effective -java.com / 2010/05 / в-преимущества-и-ловушки-из-Autoboxing /