我使用的代码如下:
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;
Run Code Online (Sandbox Code Playgroud)
但在我的应用程序中,我遇到性能问题.如何优化?
也许更好用?
if (absValue>0) return absValue
else return absValue<0?-absValue:null;
Run Code Online (Sandbox Code Playgroud)
谢谢
那么,你目前所拥有的代码甚至都无法编译 - 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;
}
Run Code Online (Sandbox Code Playgroud)
当我们到达最终选项时,我们已经知道该值是负数,因此我们实际上不再需要调用abs.
目前还不清楚这里的背景是什么.你说你遇到了性能问题,但这肯定是在这段代码中吗?
编辑:您的最新代码显示:
if (absValue>0) return absValue
else return -1*absValue;
Run Code Online (Sandbox Code Playgroud)
这不会做同样的事情 - 如果数组包含一个盒装的0值,它不会返回null,就像你的原始代码一样.
在演出前你应该专注于正确性.
你希望你的代码用输入0做什么?如果你想让它返回0,那么我会使用:
return value >= 0 ? value : -value;
Run Code Online (Sandbox Code Playgroud)
如果您希望它返回null,请使用我最初提供的代码.
为什么包括乘法-1而不是仅仅使用一元否定算子?无论如何,我希望编译器或JIT能够摆脱它,但从根本上说你不想执行乘法 - 你想要执行否定.让您的代码尽可能地与您描述目标的方式一致.
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |