好吧,你现在得到的代码甚至都无法编译——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 值,它不会返回 null ,就像您的原始代码一样。
在执行之前,您应该关注正确性。
你想让你的代码对输入 0 做什么?如果您希望它返回 0,那么我将使用:
return value >= 0 ? value : -value;
如果您希望它返回 null,请使用我最初提供的代码。
顺便说一句,为什么要包含乘以 -1 而不仅仅是使用一元否定运算符?无论如何,我希望编译器或 JIT 能够摆脱它,但基本上你不想执行乘法 - 你想要执行否定。使您的代码尽可能接近您描述目标的方式。