“Math.abs()”的性能是否是?比用“if”表达更好?
我有表达:
Double getAbs(Double value){
return value> 0 ? value: value== 0 ? null : -value;
}
或者更好:
Double getAbs(Double value){
return Math.abs(value);
}
我理解 NaN 存在一些差异。但是方法 Math.abs(double) - 所以我们拆箱了。 什么情况下性能更好?
I have expression:
Double getAbs(Double value){
return value> 0 ? value: value== 0 ? null : -value;
}
or better:
Double getAbs(Double value){
return Math.abs(value);
}
I understand that there are some differences about NaN. But method Math.abs(double) - so we have unboxing.
In which case performance better?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
代码中唯一的“性能”是 JVM 需要将您的
Double
拆箱为double
。Math.abs(double)
使用三元 if 语句,如下所示:因此,您的
if
语句根本不用担心性能问题。The only "performance" in your code is that the JVM will need to unbox your
Double
todouble
.Math.abs(double)
uses a ternary if statement as follows:So, your
if
statement is no performance worry at all.通常情况下,
Math.abs()
并不比你的慢。因为JVM可以根据目标机器来实现其数学运算。而且它可能比您的实施速度更快。有关更多信息,请阅读此。
无论如何,如果您需要更好的性能-在这种情况下-您可以使用
double
而不是Double
并忘记您的getAbs()< /code> 并直接使用
Math.abs()
。No usually,
Math.abs()
is not slower than yours. Because JVM can implement its math operation according to the target machine. and It can be faster than your implementation.For more information read this.
Anyway, if you need better performance -in this case- you can use
double
instead ofDouble
and forget yourgetAbs()
and useMath.abs()
directly.我刚刚查看了
SunOracle 的实现,这就是他们的实现方式。除了拆箱和自动装箱参数和返回值的成本之外,不应该有任何其他性能影响。
I just had a look at
SunOracle's implementation and this is how they've implemented itExcept for the cost of unboxing and autoboxing params and return values, there shouldn't be any other performance impact.