我有表达:
Double getAbs(Double value){
return value> 0 ? value: value== 0 ? null : -value;
}
或更好:
Double getAbs(Double value){
return Math.abs(value);
}
据我所知,NaN存在一些差异。但方法Math.abs(双) - 所以我们有拆箱。 在哪种情况下表现更好?
答案 0 :(得分:7)
代码中唯一的“性能”是JVM需要将Double
重新打包到double
。
Math.abs(double)
使用三元if语句如下:
public static double abs(double a) {
return (a <= 0.0D) ? 0.0D - a : a;
}
因此,您的if
声明根本不存在性能问题。
答案 1 :(得分:4)
通常情况下,Math.abs()
并不比你的慢。因为JVM可以根据目标机器实现其数学运算。它可能比你的实现更快。
鼓励代码生成器 使用特定于平台的本机库或微处理器 可用的说明,以提供更高的性能 数学方法的实现。这样的更高性能 实现仍然必须符合Math的规范。
有关详细信息,请参阅this。
无论如何,如果您需要更好的效果 - 在这种情况下,您可以使用double
代替Double
而忘记您的getAbs()
并使用{{1直接。
答案 2 :(得分:3)
我刚看了一下 Sun Oracle的实现,这就是他们实现它的方式
public static double abs(double a) {
return (a <= 0.0D) ? 0.0D - a : a;
}
除了取消装箱和自动装箱参数和返回值的成本之外,不应有任何其他性能影响。