Ну, код, который вы получили в данный момент, даже не скомпилируется - насколько мне известно, вызова Math.abs(Object)
нет.Однако, предполагая, что у вас на самом деле есть приведение к Double
, вы будете заниматься боксом все время.Вы можете избежать бокса, когда значение уже больше 0, и избежать вызова, когда значение равно 0, например:
static Double getAbsValue(Object[] values) {
if (values == null || values.length == 0) {
return null;
}
Double value = (Double) values[0];
return value > 0 ? value
: value == 0 ? null
: -value;
}
К тому времени, когда мы доберемся до финального вариантамы уже знаем, что значение отрицательное, поэтому нам больше не нужен вызов abs
.
Не совсем понятно, какой здесь контекст.Вы говорите, что у вас проблемы с производительностью, но действительно ли это определенно в этом коде?
РЕДАКТИРОВАТЬ: Ваш последний код показывает:
if (absValue>0) return absValue
else return -1*absValue;
Это не таксделать то же самое - он не возвращает ноль, если массив содержит значение в штучной упаковке 0, как это делает ваш исходный код.
Перед выполнением следует сосредоточиться на правильности.
Что вы хотите, чтобы ваш код делал с вводом 0?Если вы хотите, чтобы он возвращал 0, я бы использовал:
return value >= 0 ? value : -value;
Если вы хотите, чтобы он возвращал ноль, используйте код, который я предоставил изначально.
Зачем включать умножение на -1а не просто использовать унарный оператор отрицания, кстати?Я ожидаю, что компилятор или JIT все равно избавятся от этого, но принципиально вы не хотите, чтобы выполняли умножение - вы хотите выполнить отрицание.Сделайте так, чтобы ваш код читался как можно ближе к тому, как вы бы описали свои цели.