java - java中接收double的绝对值最快的方法是什么?

标签 java absolute

我使用的代码如下:

Double getabsValue(final Object[] value){

if (value==null) return null;
if (value.lengt==0) return null;

final Double absValue=Maths.abs(value[0]);

if (absValue>0) return absValue
else return null;

但是在我的应用程序中我遇到了性能问题。 如何优化?

也许更好用?

if (absValue>0) return absValue
else return absValue<0?-absValue:null;

谢谢

最佳答案

好吧,你现在得到的代码甚至无法编译 - 据我所知,没有 Math.abs(Object) 调用。然而,假设您实际上在那里有一个Double的 Actor ,那么您将一直在拳击。当值已经大于 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 无论如何都能摆脱它,但从根本上来说,您不希望执行乘法 - 您希望执行求反。让你的代码读起来尽可能贴近你描述你的目标的方式。

关于java - java中接收double的绝对值最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750037/

相关文章:

java - Eclipse 不会创建 JLabels

jQuery 缩放 div 内容(嵌套 div)

html - CSS 绝对定位、box-shadow 和 overflow auto

html - 绝对div不会溢出

java - 在 Java 中将 long 转换为 byte

java - Spring AOP 代理没有按预期工作

java - 自定义对话框按钮不调用它们的 OnClick 方法

java - Protocol Buffer 中的继承

CSS 绝对位置对齐

java - Java和Solr中的Url编码问题